对于这个问题我们应该先理清我们的思路:让我们把盘子从A座移到C座还要满足大盘子在上面小盘子在下面显然只有两个座没有办法完成这时候我们可以借助一个B座来完成。好了这里就是我的的做法。
下面我们要来实施我们的搬盘子了。
要是只有一个盘子我们直接从A座移动到C座就可以了。
要是有两个盘子的话我们应该先把上面那个小的盘子先移动到B座把A座底下大盘子移动到C座,再把B座上面的盘子移动到C座上面。 要是有三个盘子 则把上面最小的盘子先移动到C座,在把中间的那个盘子移到B座,在再把C座那个盘子移到B座 ,把C座底下那个最大的盘子移到C座。再借助A座把盘子移到C座。 ......
大致搬运过程如下:
具体步骤我们总结一下:1、先借助C座把盘子从A座移到B座,这样子盘子就全部都到B座
2、再借助A座把盘子从B座移到C座,最后所有盘子都到C座上了。
#include<stdio.h>
//1、
void move(char A, char C,int n)
{
printf("%c->%c\n", A,n, C);
}
void hanoi(int n, char A, char B, char C)
{
if (n == 1)
{
move(A,1,C);//把那一个盘子从A座直接移动到C座
}
else
{
hanoi(n - 1, A, C, B);//第一步
move(A, n, C);
hanoi(n - 1, B, A, C);//第二步
}
}
//2、
void hanoi(int n, char A, char B, char C)
{
if (n == 1)
{
printf("%c->%c\n", A, C);
return;
}
else
{
hanoi(n - 1, A, C,B);
printf("%c->%c\n", A, C);
hanoi(n - 1, B, A, C);
}
}//
int main()
{
int n;
scanf("%d", &n);
hanoi(n, 'A', 'B', 'C');
return 0;
}