三層漢諾塔Java語言實現

三層漢諾塔Java語言實現

  1. 問題描述
    在諾基亞黑白機時代,玩過一個十分令人懷念的遊戲-漢諾塔,遊戲大致規則:有三根柱子A、B、C,在A柱子上從上到下存放了三個從小到大排序的碟子,每次只能移動一個碟子到另外的柱子上,同時每個柱子上小碟子必須在大碟子上邊,通過移動將所有碟子從A柱子移動到C柱子上,並從上到下從小到大排序存放方可獲勝。

  2. 問題分析
    首先,我們將碟子進行編寫序號,按照從小到大的順序爲:1、2、3。首先,我們考慮只有2個碟子的問題,先將1號存放到B柱子,然後將2號碟子存放到C柱子上,最後將1號存放到C柱子上,獲得勝利。其主體思路爲,將最大碟子以上所有碟子存放到B柱子進行中轉,然後將最大碟子存放到C柱子上,然後將中轉柱子B當作第一個柱子,A柱子然後轉爲中轉柱子,將其次最大碟子轉移到C柱子上,完成一次轉移。

  3. 代碼分析
    我們分析通過使用迭代遞歸的方式,解決上述問題

Begin
movePlate(numPlate,A,B,C){
if numPlate = 1
    move(numPlate,A,C);
else
    movePlate(numPlate-1,A,C,B);
    move(numPlate,A,C);
    movePlate(numPlate-1,B,A,C);
}
End

函數參數簡析:movePlate(剩餘數量,起始柱子,中介柱子,目標柱子)
4. Java代碼

package HanoiTower;

/**
 * Created by gyc on 2017/2/28.
 */
public class HanoiTowerThree {
        /**
         *
         * @param numPlate  the number of plate
         * @param s start station
         * @param t transfer station
         * @param e end station
         */
        public static void movePlate(int numPlate, String s, String t, String e){
            if (numPlate == 1){
                System.out.println("Move Plate " + numPlate + " From " + s + " To " + e);
            }else{
                movePlate(numPlate-1, s, e, t);
                System.out.println("Move Plate " + numPlate + " From " + s + " To " + e);
                movePlate(numPlate-1, t, s, e);
            }
        }


    public static void main(String[] args) {
        int numPlate = 3;
        movePlate(numPlate, "A", "B", "C");
    }
}

測試成功
5. 輸出截圖
這裏寫圖片描述

發佈了23 篇原創文章 · 獲贊 4 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章