限制不能從最左側的塔直接移動到最右側,也不能從最右側直接移動到最左側,而是必須經過中間,求當塔有n層的時候,列印最優移動過程和最優移動總步數
例如:當塔為兩層時,最上層的塔記為1,最下層的塔記為2,則列印:
move 1 from left to mid
move 1 from mid to right
move 2 from left to mid
move 1 from right to mid
move 1 from mid to left
move 2 from mid to right
move 1 from left to mid
move 1 from mid to right
it will move 8 steps
要求用以下兩種方法解決:
遞迴;非遞迴,用棧來模擬三座塔
public class hanoi
return process(num, left, mid, right,left, right);
} public static int process(int num, string left, string mid, string right, string from, string to)else
} if(from.equals(mid) || to.equals(mid))else }
public static enum action
public static int hanoiproblem2(int num, string left, string mid, string right)
action record = ;
int step = 0;
while(rs.size() != num + 1)
return step; }
public static int fstacktotstack(action record, action prenoact, action nowact, stackfstack, stacktstack, string from, string to)
tstack.push(fstack.pop());
system.out.println("move " + tstack.peek() + "from " + from + "to "+ to);
record[0] = nowact;
return 1;
}}
用遞迴演算法求解漢諾塔問題
檔名稱 test3.1.cpp 完成日期 2016年09月08日 版本號 v1.0 問題描述 用遞迴演算法求解漢諾塔問題,其複雜度可以求得為o 2 n 是指數級的演算法 不同盤子所消耗的時間 輸入描述 無 程式輸出 演算法的執行時間 include define disccount 4 改變disc...
用棧來求解漢諾塔問題
漢諾塔問題比較經典,這裡修改一下遊戲規則 現在限制不能從最左側的塔直接移動到最右側,也不能從最右側直接移動到最左側,而是必須經過中間。求當塔有n層的時候,列印最優移動過程和最優移動總步數。輸入描述 輸入乙個數n,表示塔層數 輸出描述 按樣例格式輸出最優移動過程和最優移動總步數 示例1輸入2輸出mov...
用棧來求解漢諾塔問題
說明 本文是左程雲老師所著的 程式設計師面試 指南 第一章中 用棧來實現漢諾塔問題 這一題目的c 棧方法的復現。感謝左程雲老師的支援。題目 漢諾塔問題比較經典,這裡修改一下遊戲規則 現在限制不能從最左側的塔直接移動到最右側,也不能從最右側直接移動到最左側,而必須經過中間。求當有n層塔的時候,列印最優...