汉诺塔问题
-
问题描述
-
假设有三个柱子A.B.C,N个盘子
-
每次只允许移动一个盘子
-
必须保证小盘子在大盘子之上
-
如何把所有盘子从A移到C?
-
-
理解过程(转化为递归问题)
-
用C柱做过渡,将A柱上的n-1的盘子移到B上
-
从A柱上最下面的盘子直接移到C柱上
-
用A柱做过渡,将B柱上的n-1个盘子移到C上
-
-
算法实现
#include "iostream"
using namespace std;
void move(int x,char a,char b)
{
cout<<x<<"从"<<a<<"移到"<<b<<"\n";
}
void hanoi(int n,char x,char y,char z)
{
if(n==1) move(n,x,z);
else
{
hanoi(n-1,x,z,y);
move(n,x,z);
hanoi(n-1,y,x,z);
}
}
int main(void)
{
int n;
cin>>n;
hanoi(n,'A','B','C');
return 0;
} -
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步