其實演算法非常簡單,當盤子的個數為n時,移動的次數應等於2^n – 1(有興趣的可以自己證明試試看)。後來一位美國學者發現一種出人意料的簡單方法,只要輪流進行兩步操作就可以了。首先把三根柱子按順序排成品字型,把所有的圓盤按從大到小的順序放在柱子a上,根據圓盤的數量確定柱子的排放順序:若n為偶數,按順時針方向依次擺放 a b c;
若n為奇數,按順時針方向依次擺放 a c b。
⑴按順時針方向把圓盤1從現在的柱子移動到下一根柱子,即當n為偶數時,若圓盤1在柱子a,則把它移動到b;若圓盤1在柱子b,則把它移動到c;若圓盤1在柱子c,則把它移動到a。
⑵接著,把另外兩根柱子上可以移動的圓盤移動到新的柱子上。即把非空柱子上的圓盤移動到空柱子上,當兩根柱子都非空時,移動較小的圓盤。這一步沒有明確規定移動哪個圓盤,你可能以為會有多種可能性,其實不然,可實施的行動是唯一的。
⑶反覆進行⑴⑵操作,最後就能按規定完成漢諾塔的移動。
所以結果非常簡單,就是按照移動規則向乙個方向移動金片:
如3階漢諾塔的移動:a→c,a→b,c→b,a→c,b→a,b→c,a→c
#python **實現def move(n, a, b, c):
if n==1:
print a,'-->',c
return
else:
move(n-1,a,c,b)
print a,'-->',c
move(n-1,b,a,c)
return
n=int(raw_input('請輸入圓盤的個數:'))
move(n, 'a', 'b', 'c')
漢諾塔問題演算法介紹
其實演算法非常簡單,當盤子的個數為n時,移動的次數應等於2 n 1 有興趣的可以自己證明試試看 後來一位美國學者發現一種出人意料的簡單方法,只要輪流進行兩步操作就可以了。首先把三根柱子按順序排成品字型,把所有的圓盤按從大到小的順序放在柱子a上,根據圓盤的數量確定柱子的排放順序 若n為偶數,按順時針方...
漢諾塔問題演算法介紹
其實演算法非常簡單,當盤子的個數為n時,移動的次數應等於2 n 1 有興趣的可以自己證明試試看 後來一位美國學者發現一種出人意料的簡單方法,只要輪流進行兩步操作就可以了。首先把三根柱子按順序排成品字型,把所有的圓盤按從大到小的順序放在柱子a上,根據圓盤的數量確定柱子的排放順序 若n為偶數,按順時針方...
漢諾塔演算法
最簡步驟 2的n次冪 1 為了實現 n個盤從 借助c 從a 移動到 b 思路如下 首先考慮極限當只有乙個盤的時候 只要 盤直接從 a b即可 那麼當有2個盤的時候就只要先把1號盤從a c 然後 把2號盤 a b 再 把 2好盤從 c b 那麼當有n個盤的時候你只要先把 n 1個 盤 借助 b 移動到...