漢諾塔的改編題(用棧求解,分別遞迴和非遞迴)

2021-08-03 17:16:45 字數 1245 閱讀 3636

限制不能從最左側的塔直接移動到最右側,也不能從最右側直接移動到最左側,而是必須經過中間,求當塔有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層塔的時候,列印最優...