首先我们对题目重现:
汉诺塔:汉诺塔(Tower of Hanoi)源于印度传说中,大梵天创造世界时造了三根金钢石柱子,其中一根柱子自底向上叠着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。有三根杆子A,B,C。A杆上有N个(N>1)穿孔圆盘,盘的尺寸由下到上依次变小.要求按下列规则将所有圆盘移至C杆:
1.每次只能移动一个圆盘;
2.大盘不能叠在小盘上面.
可将圆盘临时置于B杆,也可将从A杆移出的圆盘重新移回A杆,但都必须尊循上述两条规则。
求移动的过程。
在这里我们对他的移动过程具象化,达到这样的效果:

首行输入3,接下来是用1, 2, 3代表他的大小等级。
是不是挺形象生动的。
算法思考:
对于汉诺塔,我们用的是递归的思想。对于N层的汉诺塔,我们只需要将前n-1层的汉诺塔移到B柱上,接下来将第n层移动到C,接着,将前n-1的汉诺塔移动到C上。因为越往底层,移动次数越少,所以在对前n-1项进行分析的时候,不需要对下层的进行管理。
代码实现:
首先是C++ 的基本框架:
#include<iostream>
using namespace std;
int main() {
turn 0;
}
在这里为了方便管理,所以用到了栈来进行数据储存,并且方便后面的运算,我们将栈放到主函数外面。
#include<iostream>
#include<stack>
using namespace std;

本文详细解析了汉诺塔问题的背景及规则,利用递归思想阐述了解决方案,通过C++代码实现了汉诺塔的移动过程,并可视化展示了每一步状态。

2576

被折叠的 条评论
为什么被折叠?



