笔者今天在看数据结构中书的时候,发现其中一个关于介绍Hanoi塔的小节,里面的内容非常有意思(书是严蔚敏的数据结构,章节是第三章第三小节),于是自己尝试了下手动实现代码解决Hanoi塔问题,意在加深理解栈与递归的使用。摘录自己的实现过程:
- 环境:Win10+Eclipse+jdk1.8
- 代码:
package henu_xb;
public class Hanoi {
public Hanoi() {
System.out.println("游戏开始!");
}
/**
* 将塔座上的num个圆盘按从小到大的顺序,借助y柱从x柱移动到z柱上。
* @param num 多少个圆盘
* @param x 待移动的柱
* @param y 辅助柱
* @param z 目标柱
*/
public void MyHanoi(int num, char x, char y, char z) {
if (num == 1) {
//将编号1的圆盘从x柱移到z柱。
MyMove(1, x, z);
} else {
// 将除第num个圆盘外的其它盘通过z柱从x柱移动到y柱上
MyHanoi(num - 1, x, z, y);
// 将编号为num的盘从x柱移动到z柱
MyMove(num,x,z);
// 再将除第num个圆盘外的其它盘通过x柱从y柱移动到z柱上
MyHanoi(num -1, y, x, z);
}
}
/**
* 将编号为 no的圆盘从sou柱上移动到des柱上
* @param no 编号
* @param sou
* @param des
*/
public void MyMove(int no, char sou, char des) {
System.out.println(String.format("记录:编号为 %s 的圆盘从 %s 柱上移到了 %s 柱上!",no,sou,des));
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Hanoi h = new Hanoi();
char x = 'x';
char y = 'y';
char z = 'z';
h.MyHanoi(3, x, y, z);
}
}
OK,就先记录到这!