筆者今天在看數據結構中書的時候,發現其中一個關於介紹Hanoi塔的小節,裏面的內容很是有意思(書是嚴蔚敏的數據結構,章節是第三章第三小節),因而本身嘗試了下手動實現代碼解決Hanoi塔問題,意在加深理解棧與遞歸的使用。摘錄本身的實現過程:數據結構
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