汉诺塔c语言解法
1.原理介绍
假设有四层,三条棍,那需要移上三层到2号棍,要把上三层移到二号棍,需要把上两层移到三号棍,要把上两层移到三号棍,需要把上一层移到二号棍。分到一后就可以开始行动。把下层移动后,上层需要回来,所以还需要补充个移动。具体看代码。
#include <stdio.h>//解汉诺塔
int moving(int source,int m,int to,int empty);
int main()
{
int source=0,m=0,to=0,empty=0;//source:从哪里,to:移到哪里,empty:哪里还空着,m:在几层
scanf("%d",&m);//输入层数
moving(1,m,3,2); //开始进入,默认汉诺塔从最左移到最右边
m=getchar(); //防止解完秒关
}
int moving(int source,int m,int to,int empty)
{
if (m==1)//如果递归到m=1时开始移动
{
printf("把1从%d移动到%d\n",source,to);
return 0;
}
moving(source,m-1,empty,to);//还m不是1时向下递
printf("把%d从%d移动到%d\n",m,source,to);//递完开始移当前层数到指定位置
moving(empty,m-1,to,source);//然后再把其它小于当前层数的收到当前层数所在位置的顶上
}