漢諾塔(Hanoi)問題求解

2021-10-01 04:49:27 字數 1161 閱讀 6509

/* n

階hanoi塔問題:

假設有3個分別命名為x、y、z的塔座,在塔座x上插有n個直徑大小各不相同、依小到大編號為1,2,...,n的圓盤。

現在要求將x軸上的n個圓盤移至塔座z上並仍然按同樣順序疊排,圓盤移動時必須遵循下列規則:

(1)每次只能移動乙個圓盤

(2)圓盤可以插在x、y和z中的任一塔座上

(3)任何時候都不能將乙個較大的圓盤壓在較小的圓盤之上。

如何實現移動圓盤的操作呢?當n=1時,問題比較簡單,只要將編號為1的圓盤從塔座x直接移動到塔座z上即可;

當n>1時,需要利用塔座y作為輔助塔座,若能設法將壓在編號為n的圓盤之上的n-1個圓盤從塔座x移動到塔座y上,則可先將編號為n的圓盤從塔座x移到塔座z上。

而如何將n-1個圓盤從乙個塔座移到另乙個塔座的問題是乙個和原問題具有相同特徵屬性的問題,只是問題的規模小1,因此可以用同樣的方法求解。 */

#include

intc = 0;      

//用於計數移動的次數

void

hanoi(

intn

, charx,

chary,

charz)

else }

intmain()

執行結果:

1. move disk 1 from x to y

2. move disk 2 from x to z

3. move disk 1 from y to z

4. move disk 3 from x to y

5. move disk 1 from z to x

6. move disk 2 from z to y

7. move disk 1 from x to y

8. move disk 4 from x to z

9. move disk 1 from y to z

10. move disk 2 from y to x

11. move disk 1 from z to x

12. move disk 3 from y to z

13. move disk 1 from x to y

14. move disk 2 from x to z

15. move disk 1 from y to z

漢諾塔問題(Hanoi塔)

1.將from柱最上面的movesum 1個圓盤移動到by柱 借助to柱 2.將from柱上剩下的那1個圓盤直接移動到to柱 3.將by柱上的movesum 1個圓盤移動到to柱 借助from柱 int sumofplates 4 總的盤子數目 int sum 3 初始時各柱子上盤子數目 enum ...

漢諾塔問題 Hanoi

描述 一 漢諾塔問題 問 如何移?最少要移動多少次?漢諾塔示意圖如下 三個盤的移動 二 故事由來 法國數學家愛德華 盧卡斯曾編寫過乙個印度的古老傳說 在世界中心貝拿勒斯 在印度北部 的聖廟裡,一塊黃銅板上插著三根寶石針。印度教的主神梵天在創造世界的時候,在其中一根針上從下到上地穿好了由大到小的64片...

漢諾塔問題 hanoi(遞迴)

漢諾塔問題 hanoi 現有abc三個柱子,a中有n個盤 上小下大 移動到c上,要求全程上小下大 演算法 遞迴,把1 n 1個盤當作乙個整體 include 函式宣告 函式功能 把n個盤 從a 借助b,移到c hanoi int n,char x,char y,char z 函式功能 把乙個盤子x ...