如果对其他经典算法感兴趣,可以点击我的主页,有惊喜哟
#include<stdio.h>//汉诺塔问题
/*当 n=1 时,只需将编号为 1 的圆盘从塔座 A 移到塔座 C上即可;
当 n>1 时,需要分解步骤:
设法将塔座 A 上编号为1,2,··,n-1的n-1 个圆盘移到塔座 B上;
将编号为 n的圆盘从塔座 A 移到塔座 C上;
再设法将塔座 B 上编号为1,2,···,n-1的n-1 个圆盘移到塔座 C上;
这样求解 n 阶 hanoi 塔问题就转换为求解 n-1 阶 hanoi塔问题了。
如此递推下去,每次求解问题的规模就小1。*/
int move(char x,char y)
{
printf("\n%c->%c",x,y);//将一个圆盘从x移到y
}
void hanoi(int n,char a,char b,char c)//空类型函数,一整三字符
{
if(n==1)
move(a,c);//
else
{
hanoi(n-1,a,c,b);//将n-1个圆盘从塔座a移到塔座b,塔座c过渡
move(a,c);//将第n个圆盘从塔座a移到塔座c
hanoi(n-1,b,a,c);// 将n-1个圆盘从塔座b移到塔座c,塔座a过渡
}
}
void main()
{
int n,i,j=1;
printf("请输入要移动的1圆盘数:");
scanf("%d",&n);
printf("移动圆盘的过程如下:");
hanoi(n,'A','B','C');//这个赋值很重要
for(i=1;i<=n;j=j*2,i++);//咱写个循环就是为了绕过pow函数
printf("\n总共需要的步数为:%d",j-1);
}