雙色漢諾塔

2021-06-19 16:08:36 字數 945 閱讀 8912

分析:設盤子原來在a柱上,目標為b、c柱。顯然與單色漢諾塔問題相同為典型的遞迴問題。將最後的盤子移動的目標步驟為:

(1) 除最後兩個盤子外,將所有的盤子移動到c;

(2) 將最後的兩個盤子移動到b;

(3) 再將c上所有的盤子移動到a;

(4) 最後將b上的乙個盤子移動c。

易得移動出最後兩個盤子以外,可以將大小相同顏色不同的盤子看作乙個來移動,因此下邊提到的個數均代表大小相同顏色不同的盤子。將n個盤子(實際盤子個數字2n)從a移動到c的步驟為:

(1)  首先將n – 1個盤子從a移動到b;

(2)  將最後的盤子從a移動到c;

(3)  再將b上的盤子移動到c。

經三步便可將所有的盤子從a移動到目標c。再加上上述的將最後的盤子移動到目標的步驟便可完成全部盤子的移動過程。

c++參考**如下,函式入口test(int disks);

class chanoi

;chanoi::chanoi(void)

chanoi::~chanoi(void)

void chanoi::hanoi(int disks, char source, char temp, char target)

{ //這兒的1表示有兩個盤子

if (1 == disks)

{ cout<

for (int i = disks / 2; i > 1; i--)

{ hanoi(i - 1, source, temp, target);

cout<

雙色漢諾塔

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

雙色漢諾塔問題

雙色漢諾塔問題 圓盤最初是混合顏色的從小到大排好的,現在要求根據其顏色分開到兩個柱子上分別從小到大排好。三色漢諾塔問題可與此類似,分別是排到三個柱子上。與漢諾塔問題類似,稍作一點改動,假設柱子的編號為abc,共有n個圓盤 n為偶數 1.將最上面的n 1個圓盤從a移動到b上面 2.將底部那個圓盤從a移...

9410 雙色漢諾塔

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