雙色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 個圓...