三個柱子,起初有若干個按大小關係順序安放的盤子,需要全部移動到另外乙個柱子上。移動規則:在小圓盤上不能放大圓盤,在三根柱子之間一次只能移動乙個圓盤。
移動次數: 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
演算法題 漢諾塔問題
www.i search.com.cn index.html?from line1 從一到無窮大 一書中提到乙個關於 世界末日 的問題。愛好數學的歷史學家 w.w.r.鮑爾 w.w.w.r.ball 是這樣說的 在貝拿勒斯那座偉大的神廟裡,代表世界中心的穹頂之下安放著一塊銅板,銅板上鑲有 3 根高 ...
演算法題 漢諾塔問題
問題描述 三個柱子,起初有若干個按大小關係順序安放的盤子,需要全部移動到另外乙個柱子上。移動規則 在小圓盤上不能放大圓盤,在三根柱子之間一次只能移動乙個圓盤。移動次數 f n 2n 1 解法思路 使用遞迴演算法進行處理。漢諾塔的演算法大概有3個步驟 1 把a上的n 1個盤通過c移動到b。2 把a上的...
演算法題 漢諾塔
public static void moveplant int size,listfirst,listsecond,listthird 首先將n 1個盤子,從第乙個柱子移動到第二個柱子 moveplant size 1,first,third,second 然後將最後乙個盤子移動到第三個柱子上 t...