百練OJ:4147:漢諾塔問題(Hanoi)——python實現漢諾塔
一、漢諾塔問題
有三根杆子A,B,C。A杆上有N個(N>1)穿孔圓盤,盤的尺寸由下到上依次變小。要求按下列規則將所有圓盤移至C杆: 每次只能移動一個圓盤; 大盤不能疊在小盤上面。 提示:可將圓盤臨時置於B杆,也可將從A杆移出的圓盤重新移回A杆,但都必須遵循上述兩條規則。
問:如何移?最少要移動多少次?
漢諾塔示意圖如下:
二、故事由來
法國數學家愛德華·盧卡斯曾編寫過一個印度的古老傳說:在世界中心貝拿勒斯(在印度北部)的聖廟裡,一塊黃銅板上插著三根寶石針。印度教的主神梵天在創造世界的時候,在其中一根針上從下到上地穿好了由大到小的64片金片,這就是所謂的漢諾塔。不論白天黑夜,總有一個僧侶在按照下面的法則移動這些金片:一次只移動一片,不管在哪根針上,小片必須在大片上面。僧侶們預言,當所有的金片都從梵天穿好的那根針上移到另外一根針上時,世界就將在一聲霹靂中消滅,而梵塔、廟宇和眾生也都將同歸於盡。
不管這個傳說的可信度有多大,如果考慮一下把64片金片,由一根針上移到另一根針上,並且始終保持上小下大的順序。這需要多少次移動呢?這裡需要遞迴的方法。假設有n片,移動次數是f(n).顯然f(1)=1,f(2)=3,f(3)=7,且f(k+1)=2*f(k)+1。此後不難證明f(n)=2^n-1。n=64時, 假如每秒鐘一次,共需多長時間呢?一個平年365天有31536000 秒,閏年366天有31622400秒,平均每年31556952秒,計算一下: 18446744073709551615秒 這表明移完這些金片需要5845.54億年以上,而地球存在至今不過45億年,太陽系的預期壽命據說也就是數百億年。真的過了5845.54億年,不說太陽系和銀河系,至少地球上的一切生命,連同梵塔、廟宇等,都早已經灰飛煙滅。
三、解法
解法的基本思想是遞迴。假設有A、B、C三個塔,A塔有N塊盤,目標是把這些盤全部移到C塔。那麼先把A塔頂部的N-1塊盤移動到B塔,再把A塔剩下的大盤移到C,最後把B塔的N-1塊盤移到C。 每次移動多於一塊盤時,則再次使用上述演算法來移動。
輸入輸入為一個整數後面跟三個單字元字串。整數為盤子的數目,後三個字元表示三個杆子的編號。輸出輸出每一步移動盤子的記錄。一次移動一行。
每次移動的記錄為例如3:a->b 的形式,即把編號為3的盤子從a杆移至b杆。
我們約定圓盤從小到大編號為1, 2, ...n。即最上面那個最小的圓盤編號為1,最下面最大的圓盤編號為n。樣例輸入
3 a b c樣例輸出
1:a->c 2:a->b 1:c->b 3:a->c 1:b->a 2:b->c 1:a->c解法:
def move( num, sour, dest):
print(num, end=':')
print(sour, end='->')
print(dest)
def hanoi( num, sour, tem, dest):
if num == 1:
move(num, sour, dest)
else:
hanoi(num-1, sour, dest, tem)
move(num, sour, dest)
hanoi(num-1, tem, sour, dest)
n=input()
hanoi(int (n.split()[0]),n.split()[1],n.split()[2],n.split()[3])
相關文章
- hanoi漢諾塔C++實現C++
- 漢諾塔(hanoi) C語言實現C語言
- Python實現:漢諾塔問題Python
- 小知識系列(3):Hanoi塔(漢諾塔,河內塔)
- 遞迴實現漢諾塔問題遞迴
- 漢諾塔的實現
- 漢諾塔-PythonPython
- SQL 漢諾塔SQL
- 奇怪的漢諾塔 - 題解
- 漢諾塔詳解
- ACM 漢諾塔(三)ACM
- python3:遞迴解漢諾塔問題Python遞迴
- PHP實現漢諾塔演算法PHP演算法
- 漢諾塔通項公式公式
- 漢諾塔和遞迴遞迴
- c++遞迴與迭代實現漢諾塔C++遞迴
- js解決漢諾塔問題程式碼例項JS
- C#中漢諾塔問題的遞迴解法C#遞迴
- HT for Web 3D遊戲設計設計--漢諾塔(Towers of Hanoi)Web3D遊戲設計
- js漢諾塔問題解決方法程式碼例項JS
- 漢諾塔遊戲《演算法很美》遊戲演算法
- 漢諾塔演算法演示1.0演算法
- 經典遞迴解決漢諾塔!遞迴
- 漢諾塔非遞迴演算法遞迴演算法
- 漢諾塔非遞迴棧程式碼遞迴
- 從漢諾塔遊戲理解python遞迴函式遊戲Python遞迴函式
- 化繁為簡 經典的漢諾塔遞迴問題 in Java遞迴Java
- 【YbtOJ高效進階 遞推-2】奇怪漢諾塔
- 漢諾塔移動步數的計算 (轉)
- 漢諾塔的圖解遞迴演算法圖解遞迴演算法
- 第二章 :查詢與排序-------遞迴經典問題——漢諾塔問題排序遞迴
- [演算法練習及思路-程式設計師面試金典(Java解法)]No46.漢諾塔問題演算法程式設計師面試Java
- 【分治演算法】歸併排序,快速排序和漢諾塔演算法排序
- 基於HTML5的WebGL設計漢諾塔3D遊戲HTMLWeb3D遊戲
- 漢羅塔問題 java實現Java
- 漢諾塔與二進位制、滿二叉樹的千絲萬縷二叉樹
- 寶塔後臺解決寶塔相關問題
- JAVA漢諾塔遞迴 之SpringCloud企業分散式微服務雲架構快速開發平臺Java遞迴SpringGCCloud分散式微服務架構