借助堆疊以非遞迴(迴圈)方式求解漢諾塔的問題(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
#include #includeusing
namespace
std;
//漢諾塔問題 n a b c n個數字 從a柱借助b柱移動到c柱
//非遞迴實現
class
hanoinode,a,b,c{}
};void hanoi(int n,int a,int b,int
c));
while(!hanoitower.empty());
int a =,b , c;
if(temp.n==1
)else
}}int
main()
遞迴實現
#include usingnamespace
std;
//遞迴實現
void hanoi(int n,char a,char b,char
c)else
}int
main(){
intn;
cin >>n;
hanoi(n,'a
','b
','c');
return
0;
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則...
5 17 漢諾塔的非遞迴實現 25分
5 17 漢諾塔的非遞迴實現 25分 借助堆疊以非遞迴 迴圈 方式求解漢諾塔的問題 n,a,b,c 即將n個盤子從起始柱 標記為 a 通過借助柱 標記為 b 移動到目標柱 標記為 c 並保證每個移動符合漢諾塔問題的要求。輸入為乙個正整數n,即起始柱上的盤數。每個操作 移動 佔一行,按柱1 柱2的格式...