雙色Hanoi塔問題

2021-07-08 14:56:55 字數 1131 閱讀 3729

雙色hanoi塔問題

【問題描述】

設a、b、c是3 個塔座。開始時,在塔座a 上有一疊共n 個圓盤,這些圓盤自下而上,由大到小地疊在一起。各圓盤從小到大編號為1,2,……,n,奇數號圓盤著藍色,偶數號圓盤著紅色,如圖所示。現要求將塔座a 上的這一疊圓盤移到塔座b 上,並仍按同樣順序疊置。在移動圓盤時應遵守以下移動規則:

規則(1):每次只能移動1 個圓盤;

規則(2):任何時刻都不允許將較大的圓盤壓在較小的圓盤之上;

規則(3):任何時刻都不允許將同色圓盤疊在一起;

規則(4):在滿足移動規則(1)-(3)的前提下,可將圓盤移至a,b,c 中任一塔座上。 

試設計乙個演算法,用最少的移動次數將塔座a 上的n個圓盤移到塔座b 上,並仍按同樣順序疊置。

【程式設計任務】

對於給定的正整數n,程式設計計算最優移動方案。

【輸入格式】

由檔案hanoi.in給出輸入資料。第1 行是給定的正整數n。

【輸出格式】

將計算出的最優移動方案輸出到檔案hanoi.out。檔案的每一行由乙個正整數k和2個字元c1和c2組成,表示將第k個圓盤從塔座c1移到塔座c2上。

【輸入樣例】3

【輸出樣例】

1 a  b

2 a  c

1 b  c

3 a  b

1 c  a

2 c  b

1 a  b

#include

#include

using namespace std;

int k=0,n,i;

int f1[1200],f2[1200],f3[1200];

void mov(int n,char a,char c,char b) 

int main()

return0;

}通過手動模擬發現,其實雙色與單色移動方法相同,因為在最小的移動方法中同色的兩個盤子是不可能在一起的,如果只求移動的最少步數,可以用公式2^n-1,注意數值過大時需要用高精度

雙色Hanoi塔問題

設a,b,c是3個塔座。開始時,在塔座a上有一疊共n個圓盤,這些圓盤自下而上,由大到小地疊在一起。各圓盤從小到大編號為1,2,n,奇數號圓盤著藍色,偶數號圓盤著紅色。現要求將塔座a上的這一疊圓盤移到塔座b上,並仍按同樣順序疊置。在移動圓盤時應遵守以下移動規則 規則 1 每次只能移動1個圓盤 規則 2...

雙色Hanoi塔問題

題目描述 設a b c是3 個塔座。開始時,在塔座a 上有一疊共n 個圓盤,這些圓盤自下而上,由大到小地疊在一起。各圓盤從小到大編號為1,2,n,奇數號圓盤著藍色,偶數號圓盤著紅色,如圖所示。現要求將塔座a 上的這一疊圓盤移到塔座b 上,並仍按同樣順序疊置。在移動圓盤時應遵守以下移動規則 規則 1 ...

遞迴 雙色Hanoi塔問題

設a b c是3 個塔座。開始時,在塔座a 上有一疊共n 個圓盤,這些圓盤自下而上,由大到小地疊在一起。各圓盤從小到大編號為1,2,n,奇數號圓盤著藍色,偶數號圓盤著紅色。現要求將塔座a 上的這一疊圓盤移到塔座b 上,並仍按同樣順序疊置。在移動圓盤時應遵守以下移動規則 規則 1 每次只能移動1 個圓...