漢諾塔非遞迴演算法

2021-09-12 23:15:42 字數 638 閱讀 9579

輸入格式:

輸入為乙個正整數n,即起始柱上的盤數。

輸出格式:

每個操作(移動)佔一行,按柱1 -> 柱2的格式輸出

輸入樣例:

3輸出樣例:

a -> c

a -> b

c -> b

a -> c

b -> a

b->c

乙個美國學者總結得到:所有的漢諾塔移動可以總結為重複的兩步,我們假設現在最小的圓盤在a柱子上,柱子為a,b,c

第二步:對a柱子和c柱子進行頂上最小的元素進行判斷,把小一點的那個圓盤移動到大一點的那個圓盤(有空則摞在空柱子上)。

重複上述兩步就可以得到答案。

注意:這樣得到的最後的答案不一定是摞在c上,如果n是奇數將摞在b上,所以如果n是偶數我們就令第二個柱子為c,第三個柱子為b,這樣就一定最後是摞在c上的。

#include#include char s[4] = ;

std::stacka[4];

bool move(int before, int after)

int main()

while (++count)

}在這裡插入**片

(網上查的,為了以後方便看才整理上的,嘿嘿)

非遞迴 遞迴 漢諾塔演算法實踐

漢諾塔演算法是很多公司的面試題,經常會讓手寫,這裡總結了一下 1 最最最常見的也是最簡單的漢諾塔演算法,遞迴 這也是學習遞迴的乙個經典演算法題 漢諾塔演算法 遞迴 ps 列印移動過程 param level 層數 param from 起始位置 param to 目標位置 param other 多...

漢諾塔問題遞迴與非遞迴演算法

漢諾塔問題描述如下 有 a b c 3 根針,n 個圓盤 從 1.n 從上到下,按小到大順序放在 a 處,要求每次移動乙個,並保持從小到大的疊放順序,利用 c,把 n 個盤子移動到 b 處。遞迴演算法比較容易理解 fn hanoi n hanoi move n,a b c fn hanoi move...

漢諾塔 遞迴演算法

個人覺得漢諾塔這個遞迴演算法比電子老鼠的難了一些,不過一旦理解了也還是可以的,其實網上也有很多 可以直接參考。記得大一開始時就做過漢諾塔的習題,但是那時 寫得很長很長,也是不理解遞迴的結果。現在想起來漢諾塔的演算法就3個步驟 第一,把a上的n 1個盤通過c移動到b。第二,把a上的最下面的盤移到c。第...