0
点赞
收藏
分享

微信扫一扫

解决汉诺塔问题

#include<stdio.h>

int ct = 1;                                        //定义全局变量记录移动步数

void move(int n, char from,char to)//打印盘子移动的具体步骤;

{

printf("第%2d步,移动第%d个盘子从%c>>>%c\n", ct++, n, from, to);

}

int hanoi(int n)                  //计算总步数

{

if (n < 2)

return 1;

else                           //无论怎样移动总要将n上前n-1个盘子借助C移动到B                                     //  上,然后再借助A移动到上;

{                                     //即总步数为 2*T(n-1)+1

return 2 * hanoi(n - 1) + 1;

}

}

void hanoi_pc(int n, char x,char y,char z)//实施步骤

{               // 当盘子数超过两个时总要经历步骤将第n-1个盘子借助C移动到 B

                      //将n移动到C,再将之后B上的第n-1个盘子借助C移动到A上

if (n == 1)

move(n, x, z);

else

{

hanoi_pc(n - 1, x, z, y);//x为初始针,y为目的针,z为辅助针;

move(n - 1, x, z);

hanoi_pc(n - 1, y, x, z);//这里的  n-1 都代表同一个盘子

}

}

int main()

{

int n = 0 ;                                                 //设置盘子变量

int t = 0;

char x = 'A'; char y = 'B'; char z = 'C';        //设置盘针ABC;

printf("请输入汉诺塔中盘子的个数>>");

scanf_s("%d", &n);                                    //获取盘子数给n

t= hanoi(n);                                        //使用函数求解所需要的步数给到t;

hanoi_pc(n,x, y, z);                                        //获取移动的详细步骤;

printf("共需要走%d步\n", t);

return 0;

}

举报

相关推荐

Python 汉诺塔问题

汉诺塔问题详解

递归--汉诺塔问题

汉诺塔

【C语言】汉诺塔问题

汉诺塔的递归问题

0 条评论