雙色漢諾塔問題

2021-06-26 01:25:47 字數 696 閱讀 2471

雙色漢諾塔問題:圓盤最初是混合顏色的從小到大排好的,現在要求根據其顏色分開到兩個柱子上分別從小到大排好。三色漢諾塔問題可與此類似,分別是排到三個柱子上。

與漢諾塔問題類似,稍作一點改動,假設柱子的編號為abc,共有n個圓盤(n為偶數)

1.將最上面的n-1個圓盤從a移動到b上面

2.將底部那個圓盤從a移動到c

3.將b柱上的n-2個圓盤移動到a上,從而形成了第二個圖那樣的情景

因此,可以根據乙個遞迴的解法來解決此問題

//雙色漢諾塔問題

#includeusing namespace std;

int removetimes = 0;

void hanoiorignal(int nmovnum, char czsource, char cztemp, char czdes)

else if (nmovnum == 1)

cout

while (ndisknum)

system("pause");

}

輸入共有6個圓盤,輸出結果如下:

雙色漢諾塔

分析 設盤子原來在a柱上,目標為b c柱。顯然與單色漢諾塔問題相同為典型的遞迴問題。將最後的盤子移動的目標步驟為 1 除最後兩個盤子外,將所有的盤子移動到c 2 將最後的兩個盤子移動到b 3 再將c上所有的盤子移動到a 4 最後將b上的乙個盤子移動c。易得移動出最後兩個盤子以外,可以將大小相同顏色不...

雙色漢諾塔

先說一說普通漢諾塔吧,思路就是先將前n 1個方塊借助c放到b上,最後乙個直接放在c上,下一步是將這n 1個方塊借助a放在c上,至此完成任務。include 第乙個塔為初始塔,中間的塔為借用塔,最後乙個塔為目標塔 int i 1 記錄步數 void move int n,char from,char ...

9410 雙色漢諾塔

time limit 1000ms second memory limit 32m 問題描述 設a b c是3 個塔座。開始時,在塔座a上有一疊共n個圓盤,這些圓盤自下而上,由大到小地疊在一起。各圓盤從小到大編號為1,2,n,奇數號圓盤著紅色,偶數號 圓盤著藍色,如圖所示。現要求將塔座a 上的這一疊...