汉诺塔问题:
- 相传在古印度圣庙中,有一种被称为汉诺塔(Hanoi)的游戏。该游戏是在一块铜板装置上,有三根杆(编号A、B、C),在A杆自下而上、由大到小按顺序放置64个金盘。游戏的目标:把A杆上的金盘全部移到C杆上,并仍保持原有顺序叠好。操作规则:每次只能移动一个盘子,并且在移动过程中三根杆上都始终保持大盘在下,小盘在上,操作过程中盘子可以置于A、B、C任一杆上。
package DataStructure;
public class HanoiTowerDemo {
public static void main(String[] args) {
hanoiTower(5, 'A', 'B', 'C');
}
/**
* 无论多少个金盘,都可以简单地分为三步完成:
* 1.将底盘上面的所有盘都移到B柱
* 2.将底盘移到C柱
* 3.将底盘上面的所有盘从B柱移到C柱
* @param num 金盘的数量
* @param A A柱
* @param B B柱
* @param C C柱
*/
public static void hanoiTower(int num, char A, char B, char C) {
if (num == 1) {
System.out.println("第1个盘从 " + A + "->" + C);
return;
}
hanoiTower(num - 1, A, C, B);
System.out.println("第" + num + "个盘从 " + A + "->" + C);
hanoiTower(num - 1, B, A, C);
}
}