演算法題 漢諾塔問題

2022-04-13 15:07:07 字數 802 閱讀 3597

問題描述

三個柱子,起初有若干個按大小關係順序安放的盤子,需要全部移動到另外乙個柱子上。移動規則:在小圓盤上不能放大圓盤,在三根柱子之間一次只能移動乙個圓盤。

移動次數: f(n)=2n -1

解法思路

使用遞迴演算法進行處理。

漢諾塔的演算法大概有3個步驟:

(1)把a上的n-1個盤通過c移動到b。

(2)把a上的最下面的盤移到c。

(3)因為n-1個盤全在b上了,所以把b當做a重複以上步驟就好了。

在網上找到乙個3階的漢諾塔遞迴過程示意圖,參考一下。

**實現

**

#include 

int step = 0;

void hanoi(int n, char start, char assist, char end)

}int main()

執行結果

please input the disk num:

3move 1 from a --> c

move 2 from a --> b

move 1 from c --> b

move 3 from a --> c

move 1 from b --> a

move 2 from b --> c

move 1 from a --> c

totally move 7 steps

演算法題 漢諾塔問題

三個柱子,起初有若干個按大小關係順序安放的盤子,需要全部移動到另外乙個柱子上。移動規則 在小圓盤上不能放大圓盤,在三根柱子之間一次只能移動乙個圓盤。移動次數 f n 2n 1 使用遞迴演算法進行處理。漢諾塔的演算法大概有3個步驟 1 把a上的n 1個盤通過c移動到b。2 把a上的最下面的盤移到c。3...

演算法題 漢諾塔問題

www.i search.com.cn index.html?from line1 從一到無窮大 一書中提到乙個關於 世界末日 的問題。愛好數學的歷史學家 w.w.r.鮑爾 w.w.w.r.ball 是這樣說的 在貝拿勒斯那座偉大的神廟裡,代表世界中心的穹頂之下安放著一塊銅板,銅板上鑲有 3 根高 ...

演算法題 漢諾塔

public static void moveplant int size,listfirst,listsecond,listthird 首先將n 1個盤子,從第乙個柱子移動到第二個柱子 moveplant size 1,first,third,second 然後將最後乙個盤子移動到第三個柱子上 t...