汽车前轮球笼坏了症状:4阶Hanoi塔问题

来源:百度文库 编辑:杭州交通信息网 时间:2024/04/28 19:24:29
(n阶Hanoi塔问题)假设有三个分别命名为X、Y、Z的塔座,在塔座X上插有n个直径大小各不相同、依小到大编号为1,2,…,n的圆盘。现要求将X轴上的n个圆盘移至塔座Z上并仍按同样顺序叠排,圆盘移动时必须遵循下列规则:
1)每次只能移动一个圆盘;
2)圆盘可以插在X、Y、Z中的任一塔座上;
3)任何时刻都不能将一个较大的圆盘压在较小的圆盘之上。
不要求写出C语言程序,仅写出实现的伪码即可。
演示时,首先把算法讲解清楚,然后用图例法讲解清楚4阶Hanoi塔的实现。

其实这是一个用递归来做很简单:
首先,你要想将n 个圆盘从X移到Z首先你就要将上面的n-1个圆盘从X移到Y然后将最后的从X移到Z;然后你要将n-1个圆盘从X移到Y,那么就是一个递归的过程:
参考程序;
#include <stdio.h>
void move(char x,char y)
{
printf("%c->%c\n",x,y);

}

void hanoi(int n,char a,char b,char c)
{
if(n==1)
move(a,b);
else
{
hanoi(n-1,a,c,b);//将n-1个盘从a->b借助c来实现 ‘|’
move(a,c); //将底层的一个盘从a->c |
hanoi(n-1,b,a,c);//将n-1个盘从b->c借助a 来实现 |

}
}

main()
{
int m;
printf("input the number of the disks:");
scanf("%d",&m);
printf("the step to moving %d disks:\n",m);
hanoi(m,'X','Y','Z');
}
参考教材;
谭浩强第二版第163页