这道题看了好久,中间的过程比较复杂,看网上一步步的分析才有点头绪,其实汉诺塔问题就是分为三步,第一步:将n-1(n>1)个盘子从a通过c移到b盘子上,第二步:把第n个盘子从a移到c上,第三步:将n-1个盘子从b通过a移到c上
#include <stdio.h>
void hanoi(int n,char a,char b,char c)
{
if(n==1)
printf("%c->%c\n",a,c);//当n只有1个盘子的时候直接从a柱子移动到目标柱子上
else
{
hanoi(n-1,a,c,b);/*第n-1个要从a通过c移动到b,先调用hanoi函数将n号盘
子上面的n-1个盘子移到b柱子上*/
printf("%c->%c\n",a,c);//将n号盘子直接移到目标柱子上
hanoi(n-1,b,a,c);/*n-1个移动过来之后b变开始盘,b通过a移动到c,
这时候a盘已经没有盘子了,再将b柱子上的n-1个盘子移到目标柱子上*/
}
}
int main()
{
int n;
scanf("%d",&n);
hanoi(n,'a','b','c');
return 0;
}
//有相关的word可以看