本文目錄一覽:
- 1、漢諾塔怎麼玩?
- 2、漢諾塔的演算法
- 3、python解決漢諾塔問題?
漢諾塔怎麼玩?
漢諾塔玩法如下:
1、每次只允許一個人移動碟子,且每次僅允許移動一個碟子的位置。
2、在團隊所有成員必須依次移動盤子。
3、在任意一次移動中,較小的盤子不得被置於較大的盤子下方。
4、正式開始以後,除移動盤子的隊員外,其他隊員必須站在培訓師規定的距離以外。
5、正式開始以後團隊所有成員不得說話,亦不得發出任何帶有暗示性的話語。有人出聲,將回到原始狀態,接著開始。
擴展資料
漢諾塔演算法非常簡單,當盤子的個數為n時,移動的次數應等於2^n – 1。後來一位美國學者發現一種出人意料的簡單方法,只要輪流進行兩步操作就可以了。
首先把三根柱子按順序排成品字型,把所有的圓盤按從大到小的順序放在柱子A上,根據圓盤的數量確定柱子的排放順序:若n為偶數,按順時針方向依次擺放ABC。
若n為奇數,按順時針方向依次擺放ACB。
1、按順時針方向把圓盤1從現在的柱子移動到下一根柱子,即當n為偶數時,若圓盤1在柱子A,則把它移動到B;若圓盤1在柱子B,則把它移動到C;若圓盤1在柱子C,則把它移動到A。
2、接著,把另外兩根柱子上可以移動的圓盤移動到新的柱子上。即把非空柱子上的圓盤移動到空柱子上,當兩根柱子都非空時,移動較小的圓盤。這一步沒有明確規定移動哪個圓盤,你可能以為會有多種可能性,其實不然,可實施的行動是唯一的。
3、反覆進行⑴⑵操作,最後就能按規定完成漢諾塔的移動。
漢諾塔的演算法
演算法介紹:當盤子的個數為n時,移動的次數應等於2^n–1。後來一位美國學者發現一種出人意料的簡單方法,只要輪流進行兩步操作就可以了。首先把三根柱子按順序排成品字型,把所有的圓盤按從大到小的順序放在柱子A上,根據圓盤的數量確定柱子的排放順序:若n為偶數,按順時針方向依次擺放A、B、C;
若n為奇數,按順時針方向依次擺放A、C、B。
所以結果非常簡單,就是按照移動規則向一個方向移動金片:如3階漢諾塔的移動:A→C,A→B,C→B,A→C,B→A,B→C,A→C
漢諾塔問題也是程序設計中的經典遞歸問題。
擴展資料
由來:
法國數學家愛德華·盧卡斯曾編寫過一個印度的古老傳說:在世界中心貝拿勒斯(在印度北部)的聖廟裡,一塊黃銅板上插著三根寶石針。印度教的主神梵天在創造世界的時候,在其中一根針上從下到上地穿好了由大到小的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億年,不說太陽系和銀河系,至少地球上的一切生命,連同梵塔、廟宇等,都早已經灰飛煙滅。
參考資料來源:百度百科-漢諾塔
python解決漢諾塔問題?
解漢諾塔最簡單的做法就是遞歸:
類似如何將大象裝進冰箱:1)將冰箱門打開;2)把大大象放進去;3)把冰箱門關上……
我們將所有的盤都在同一個桿上從大到小排列視為【完美狀態】,那麼,目標就是將最大碟片為n的完美狀態從a桿移到b桿,套用裝大象的思路,這個問題同樣是三步:
1)把n-1的完美狀態移到另一個桿上;
2)把n移到目標杆上;
3)把n-1的完美狀態移到目標杆上。
如下:
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/247538.html