PTA7 17 漢諾塔的非遞迴實現

2021-09-12 04:10:03 字數 796 閱讀 1092

7-17 漢諾塔的非遞迴實現 (25 分)

借助堆疊以非遞迴(迴圈)方式求解漢諾塔的問題(n, a, b, c),即將n個盤子從起始柱(標記為「a」)通過借助柱(標記為「b」)移動到目標柱(標記為「c」),並保證每個移動符合漢諾塔問題的要求。

輸入格式:

輸入為乙個正整數n,即起始柱上的盤數。

輸出格式:

每個操作(移動)佔一行,按柱1 -> 柱2的格式輸出。

輸入樣例:

3
輸出樣例:

a -> c

a -> b

c -> b

a -> c

b -> a

b -> c

a -> c

將cout輸出改為了printf輸出

在計算0,1,2柱子轉換時,一開始處理負數是用((i-1)%3+3)%3來處理,後來改用了(i+2)%3來處理就通過了。

我的**如下:

#include#include#include#includeusing namespace std;

stacks[3];

mapm;

void hannuota(int x,int n)

else

} }}int main()

if(n%2==0)

else

hannuota(x,n);

return 0;

}```

[參考文件1:](

[參考文件2:](

pta 漢諾塔的非遞迴實現

借助堆疊以非遞迴 迴圈 方式求解漢諾塔的問題 n,a,b,c 即將n個盤子從起始柱 標記為 a 通過借助柱 標記為 b 移動到目標柱 標記為 c 並保證每個移動符合漢諾塔問題的要求。輸入格式 輸入為乙個正整數n,即起始柱上的盤數。輸出格式 每個操作 移動 佔一行,按柱1 柱2的格式輸出。輸入樣例 3...

7 17 漢諾塔的非遞迴實現 25分

借助堆疊以非遞迴 迴圈 方式求解漢諾塔的問題 n,a,b,c 即將n個盤子從起始柱 標記為 a 通過借助柱 標記為 b 移動到目標柱 標記為 c 並保證每個移動符合漢諾塔問題的要求。輸入為乙個正整數n,即起始柱上的盤數。每個操作 移動 佔一行,按柱1 柱2的格式輸出。3a c a b c b a c...

7 17 漢諾塔的非遞迴實現 25分

參考 的和的。簡單說一下我理解到的方法吧 第一步是判斷輸入的n是奇數還是偶數,若為奇數,則按順時針以acb的順序擺成品字型,若為偶數,則按順時針以abc的順序擺成品字型。參考下圖 第二步將序號為1 最小 的盤,按順時針放到下乙個字母。假如以abc順序順時針擺放時,若1盤在a,則將它移動到b,若在b則...