1. 程式人生 > >遞迴----經典問題:漢諾塔遊戲

遞迴----經典問題:漢諾塔遊戲

題目:漢諾塔(又稱河內塔)問題是源於印度一個古老傳說的益智玩具。大梵天創造世界的時候做了三根金剛石柱子,在一根柱子上從下往上按照大小順序摞著64片黃金圓盤。大梵天命令婆羅門把圓盤從下面開始按大小順序重新擺放在另一根柱子上。並且規定,在小圓盤上不能放大圓盤,在三根柱子之間一次只能移動一個圓盤。這裡假設最開始放盤子的柱子為A,最終要到到達的柱子為B,另一根柱子也就是一根輔助柱子為C,假設黃金圓盤從上到下依次編號1-N。

思路:題目要求,將1-N從A移動到B,C作為輔助
   1:1~N-1從A移動到C,B為輔助,A作為源
   2:把N移動到B
   3:把1~N-1從C移動到B,A為輔助

程式碼:

public class TowerOfHanoi {

	public static void main(String[] args) {
		printHanoiTower(3, "A", "B", "C");
	}
	/**
	 * 將N個盤子從source移動到target的路徑的列印
	 * 
	 * @param N	初始的N個從小到大的盤子,N是最大編號
	 * @param from 原始柱子
	 * @param to 目標柱子
	 * @param help 輔助柱子
	 */
	
	static void printHanoiTower(int N,String from,String to,String help){
		if (N==1) {
			System.out.println("move "+N+" from "+from+" to "+to);
			return ;
		}
		printHanoiTower(N-1, from, help, to);  // 先把前N-1個盤子挪到輔助空間上去
		System.out.println("move "+N+" from "+from+" to "+to);		// N 可以順利到達目標盤子
		printHanoiTower(N-1, help, to, from);			// 讓N-1從輔助空間回到源空間上去
	}

}

結果: