问题描述
算法复杂度
2的n次方再减1
n为盘子的个数
算法实现
#include <stdio.h>#include <stdlib.h>/** 汉诺塔问题 */void hanoi(int n,char A, char B, char C){ if(1==n) //如果是一个盘子,直接将盘子从A柱子移到B柱子上 printf("将编号为%d的盘子从柱子%c移到柱子%c\n",n,A,C); else{ hanoi(n-1,A,C,B); //将A上的n-1个盘子借助C移到B printf("将编号为%d的盘子从柱子%c移到柱子%c\n",n,A,C); //直接将A柱子上的第N个盘子移到C柱子上 hanoi(n-1,B,A,C); //将B柱子上的n-1个盘子借助A移到C } }int main(){ //模拟三个柱子 char chA='A'; char chB='B'; char chC='C'; //盘子个数 int n; printf("请输入需要移动盘子的个数:"); scanf("%d",&n); hanoi(n,chA,chB,chC); return 0; }
运行结果
3个盘子
2个盘子
1个盘子
5个盘子
作者:桓宇Harry
链接:https://www.jianshu.com/p/db4d6d4d6c57
点击查看更多内容
为 TA 点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦