棧與遞歸的簡單使用:Hanoi塔小問題

  筆者今天在看數據結構中書的時候,發現其中一個關於介紹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,就先記錄到這!code

相關文章
相關標籤/搜索