汉罗塔问题
参考原文链接:https://blog.csdn.net/qq_19446965/article/details/81591945
本文只是用于加深理解,想学习建议看参考原文
问题介绍
如下图所示,从左到右有A、B、C三根柱子,其中A柱子上面有从小叠到大的n个圆盘,现要求将A柱子上的圆盘移到C柱子上去,期间只有一个原则:一次只能移到一个盘子且大盘子不能在小盘子上面,求移动的步骤和移动的次数
算法思路
将问题分为三步解决,采用递归算法
三根柱子下文用A,B,C分别代表三根柱子
(1)将最后一个底盘移动到第三根柱子前,需先将前n-1个碟子移动到第二根柱子,可看成A借助C将n-1个碟子移动到B
(2)将第n个碟子从A移动到C
(3)将第B上n-1个碟子借助A移动到C
C++可运行代码
#include <iostream>
using namespace std;
void move(char A,char C);
void hanluota(int n,char a,char b,char c)
{
if(n==1)
move(a,c);
else
{
hanluota(n-1,a,c,b);
move(a,c);
hanluota(n-1,b,a,c);
}
}
void move(char A, char C) {//执行最大盘子n的从A-C的移动
cout<<"move:"<<A<<"--->"<<C<<endl;
}
int main()
{
cout<<"移动汉诺塔的步骤:"<<endl;
hanluota(4, 'a', 'b', 'c');
}