導航:首頁 > 編程語言 > 頭歌python漢諾塔

頭歌python漢諾塔

發布時間:2023-07-31 14:40:32

『壹』 python請用遞歸演算法編程解決漢諾塔問題 在線等

這是Python3系統自帶的一個例子,估計就是這個意思,本來他是6個盤子,按照你要求改成4個了。遞歸演算法沒問題,描述也非常詳細 ;)

#!/usr/bin/envpython3
fromturtleimport*
classDisc(Turtle):
def__init__(self,n):
Turtle.__init__(self,shape="square",visible=False)
self.pu()
self.shapesize(1.5,n*1.5,2)#square-->rectangle
self.fillcolor(n/6.,0,1-n/6.)
self.st()
classTower(list):
"Hanoitower,asubclassofbuilt-intypelist"
def__init__(self,x):
"createanemptytower.xisx-positionofpeg"
self.x=x
defpush(self,d):
d.setx(self.x)
d.sety(-150+34*len(self))
self.append(d)
defpop(self):
d=list.pop(self)
d.sety(150)
returnd
defhanoi(n,from_,with_,to_):
ifn>0:
hanoi(n-1,from_,to_,with_)
to_.push(from_.pop())
hanoi(n-1,with_,from_,to_)
defplay():
onkey(None,"space")
clear()
try:
hanoi(6,t1,t2,t3)
write("pressSTOPbuttontoexit",
align="center",font=("Courier",16,"bold"))
exceptTerminator:
pass#turtledemouserpressedSTOP
defmain():
globalt1,t2,t3
ht();penup();goto(0,-225)#writerturtle
t1=Tower(-250)
t2=Tower(0)
t3=Tower(250)
#maketowerof6discs
foriinrange(4,0,-1):
t1.push(Disc(i))
#preparespartanicuserinterface;-)
write("pressspacebartostartgame",
align="center",font=("Courier",16,"bold"))
onkey(play,"space")
listen()
return"EVENTLOOP"
if__name__=="__main__":
msg=main()
print(msg)
mainloop()

『貳』 求python大神幫忙解釋一下 這個漢諾塔程序的步驟

def my_print(args):

print args

def move(n, a, b, c):

my_print ((a, '-->', c)) if n==1 else (move(n-1,a,c,b) or move(1,a,b,c) or move(n-1,b,a,c))

注釋:漢諾塔模型輸入move (n, 'a', 'b', 'c')

  1. 例如n=3

  2. move(2,a,c,b)自循環

  3. move(1,a,b,c)

  4. move(2,b,a,c) 自循環

  5. 循環完畢,輸出

你這段代碼也是類似自循環

『叄』 python的漢諾塔編碼總報語法錯誤

遞歸方法有些時候是不太好理解,不過遞歸的意義就是把解決問題n變成解決n-1的問題,最終變成解決1個問題。
假設有n個盤子,從上到下依次編號,最下面的盤子編號是大寫的N。托盤分別是x,y,z。要把所有盤子從x移動到z。
前面幾行代碼就不解釋了,很容易理解。
第五行,如果只有一個盤子,就直接從x移動到z。
第七行,如果不只一個盤子,先把上面n-1個盤子從x移動到y。
第八行,再把N號盤子從x移動到z。
第九行,再把剛才那n-1個盤子從y移動到z。

至於那n-1個盤子是怎麼移動的,再次調用這個函數,把問題變成n-2個盤子加1個盤子的問題。

『肆』 python漢諾塔非遞歸

python漢諾塔非遞歸,運用list和function知識的解答

無論stack還是recursion都是從漢諾塔的原理去解決問題,但如果已經想清楚漢諾塔的原理,其實只用把答案print出來就行了

先找規律:

一層:A-->C


兩層:A-->B

-------

A-->C

-------

B-->C


三層:A-->C

A-->B

C-->B

-------

A-->C

-------

B-->A

B-->C

A-->C


注意到n層漢諾塔有(2**n) - 1 個步驟,而中間的一步(兩個分割線之間)都是「A-->C」,中間的這一步將這一層漢諾塔的解分為上下兩個部分

仔細觀察,上面一部分是將上一層的解中所有的B,C交換,下面一部分是將上一層的解中所有的A,B交換

例如第二層是:

A-->B

A-->C

B-->C

第三層上部分就將第二層的解的C換成B,B換成C,即得出:

A-->C

A-->B

C-->B

第三層下部分就將第二層的解的A換成B,B換成A,即得出:

B-->A

A-->C

C-->B

這個規律同樣適用於第一層,和以後的所有層

然後就好辦了,代碼如圖:

代碼

其中convertAB,convertBC就是AB交換,BC交換的函數,這兩個函數可以自己定義,用中間變數即可

『伍』 python解決漢諾塔問題

解漢諾塔最簡單的做法就是遞歸:

類似如何將大象裝進冰箱:1)將冰箱門打開;2)把大大象放進去;3)把冰箱門關上……

我們將所有的盤都在同一個桿上從大到小排列視為【完美狀態】,那麼,目標就是將最大碟片為n的完美狀態從a桿移到b桿,套用裝大象的思路,這個問題同樣是三步:

1)把n-1的完美狀態移到另一個桿上;

2)把n移到目標桿上;

3)把n-1的完美狀態移到目標桿上。

如下:

閱讀全文

與頭歌python漢諾塔相關的資料

熱點內容
按鍵精靈自定義圖層命令 瀏覽:351
魅藍3手機音視頻文件夾 瀏覽:943
安卓手機製表怎麼換行 瀏覽:213
牆柱搭接箍筋怎麼加密 瀏覽:454
怎麼加密不讓人打開 瀏覽:334
2g3g演算法 瀏覽:204
python可以在net開發 瀏覽:932
編程里的hr啥意思 瀏覽:409
上海php兼職 瀏覽:728
順豐app如何驗證學生 瀏覽:380
伺服器mac地址過濾器 瀏覽:942
程序員一年內被開除 瀏覽:456
福建文檔課件加密企業 瀏覽:790
appstore美國的界面怎麼看呀 瀏覽:533
hlt單片機 瀏覽:325
CA的命令 瀏覽:685
安卓怎麼傳王者應用給蘋果 瀏覽:922
aws雲伺服器自建 瀏覽:840
如何更換伺服器登錄網站 瀏覽:700
java修改ip地址 瀏覽:838