雙色漢諾塔問題:圓盤最初是混合顏色的從小到大排好的,現在要求根據其顏色分開到兩個柱子上分別從小到大排好。三色漢諾塔問題可與此類似,分別是排到三個柱子上。
與漢諾塔問題類似,稍作一點改動,假設柱子的編號為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 上的這一疊...