对于游戏的玩法,我们可以简单分解为三个步骤
1)将前63个盘子从X移动到Y上;
2)将最底下的第64个盘子从X移动到Z上;
3)将Y的63个盘子移动到Z上;
第二步是最容易实现的一步,那么第一步和第三步如何实现?
问题一(“将X上的63个盘子借助Z移到Y上")拆解为:
—将前62个盘子从X移动到Z上;
—将最底下的第63个盘子移动到Y上;
—将Z上的62个盘子移动到Y上;
问题二(“将Y上的63个借助X移到Z上")拆解为:
—将前62个盘子从Y移动到X上;
—将最底下的第63个盘子移动到Z上;
—将X上的62个盘子移动到Y上;
那么我们如何用代码实现呢?
#include<stdio.h>
int main()
{
int h;
printf("\ninput number:\n");
scanf("%d",&h);
printf("tower disks %d\n",h);
hanoi(h, 'A', 'B', 'C');
}
void hanoi(int n, int x, int y, int z)
{
if(n==1)
printf("%c-->%c\n", x, z);
else
{
hanoi(n-1, x, z , y);
printf("%c-->%c\n", x, z);
hanoi(n-1,y,x,z);
}
}