x y z 三根柱子
若x上只有一个盘a,则直接将盘a从x移到z,x->z。
若x上只有两个盘a,b,现将a盘移到y,然后将b盘移到z,再将a盘从y移到z,a:1 x->y,b:2 x->z,a:3 y->z。
若x上只有三个盘a,b,c:
总结规律:
当有n个盘时可将n个盘看成1和n-1两个盘,先借助目标柱子柱子(z)将n-1个盘移到第三根柱子(第一次是y)上,然后将1从原柱子(第一次是x)转移到目标柱子(z)上,然后将在第三根柱子(y)上的n-1又分成1和n-2,又进行相同的操作,直到所有的圆盘都放在了z柱上。
代码:
#include<stdio.h>
void move(char pos1,char pos2)
{
printf(" %c->%c ", pos1, pos2);
}
void hanoi(int n, char pos1, char pos2, char pos3)
{
if (n == 1)
{
move(pos1, pos3);
}
else
{
hanoi(n - 1, pos1, pos3, pos2);
move(pos1, pos3);
hanoi(n - 1, pos2, pos1, pos3);
}
}
int main()
{
printf(“请输入盘子数\n”);
int n = 0;
scanf("%d", &n);
hanoi(n, ‘X’, ‘Y’, ‘Z’);
return 0;
}