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