Honoi塔问题

Honoi 塔问题   作者: Ackarlix   Hanoi 塔问题,这是一个古典的数学问题,是一个只有用递归方法解决的问题。问题是这样的:古代有一个梵塔,塔内有 3 个座 A B C ,开始时 A 座上有 64 个盘子,盘子大小不等,大的在下,小的在上。有一个老和尚想把这 64 个盘子从 A 座移到 C 座,但每次只允许移动一个盘,且在移动过程中在 3 个座上都始终保持大盘在上,小盘在下。在移动过程中可以利用 B 座。       n 个盘子从 A 座移到 C 座可以分解为以下 3 个步骤:
    (1).
A n-1 个盘借助 C 座先移到 B 座上;
    (2).
A 座上剩下的一个盘移到 C 座上;
    (3).
B n-1 个盘借助 A 座先移到 C 座上。      程序如下: i nclude  void move(char x,char y)
{ static int i=0;
  printf("%3d.%c-->%c/n",++i,x,y);
}
void hanoi(int n,char one,char two,char three)
{ /* 
n 个盘子从 one 座借助 two 座,移到 three  */
  if(n==1) move(one,three);
  else
  { hanoi(n-1,one,three,two);
    move(one,three);
    hanoi(n-1,two,one,three);
  }
}
void main()
{
  int m;
  printf("
输入盘子数(最好 2 9 之间): ");
  scanf("%d",&m);
  printf("
移动 %d 个盘子的步骤为: /n",m);
  hanoi(m,'A','B','C');
}
输出结果为(红色为键盘输入的数据): 输入盘子数(最好 2 9 之间): 3
移动 3 个盘子的步骤为:
  1.A-->C
  2.A-->B
  3.C-->B
  4.A-->C
  5.B-->A
  6.B-->C
  7.A-->C
   


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部