1. 源代碼
C++版本:https://github.com/DeanVincent/TowerOfHanoi-algorithm
2. 偽代碼
//要移動的塔包含的層數(shù)祝闻,目標地點
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. 思路
假如我們打算把一個總層數(shù)為n的漢諾塔從位置p1移動到位置p2上可很。
- 思考:這座塔有n個部分,需要哪個部分先被固定到p2?
需要最下面的一層先到捂蕴,這個問題可以理解為一個必要問題垫竞。 - 思考:最下層要移動并固定到p2之前郑原,需要做好什么準備漓藕?
需要所有在它之上的層移動到另外一個位置,就是騰地,這個可以理解為一個充分問題杭煎。 - 思考:最下層固定好了恩够,塔的其他部分如何被固定?
塔的其他部分組成了一個小塔羡铲,小塔的移動與原塔的移動過程一樣蜂桶,知道塔只由一層組成,那么直接移動即可也切。
(結束扑媚,將思路與偽代碼結合幫助理解)
還不懂的話,請聯(lián)系樓主雷恃,樓主一直在線疆股!