1. 源代码
C++版本:https://github.com/DeanVincent/TowerOfHanoi-algorithm
2. 伪代码
//要移动的塔包含的层数,目标地点
MoveTower(floor,position){
If(floor>1){
//将上面n-1层的塔移动到不碍事的地方
MoveTower(floor-1,!position);
//将最下面一层移动到目标地点
MoveFloor(floor,position);
//将上面n-1层的塔移动到最下层的上面
MoveTower(floor-1,position);
}
else if(floor==1){
//将由一层组成的塔移动到目标地点
MoveFloor(floor,position);
}
}
3. 思路
假如我们打算把一个总层数为n的汉诺塔从位置p1移动到位置p2上。
- 思考:这座塔有n个部分,需要哪个部分先被固定到p2?
需要最下面的一层先到,这个问题可以理解为一个必要问题。 - 思考:最下层要移动并固定到p2之前,需要做好什么准备?
需要所有在它之上的层移动到另外一个位置,就是腾地,这个可以理解为一个充分问题。 - 思考:最下层固定好了,塔的其他部分如何被固定?
塔的其他部分组成了一个小塔,小塔的移动与原塔的移动过程一样,知道塔只由一层组成,那么直接移动即可。
(结束,将思路与伪代码结合帮助理解)
还不懂的话,请联系楼主,楼主一直在线!
网友评论