python 漢諾塔 Python漢諾塔

2021-10-12 11:24:43 字數 2102 閱讀 7121

import turtle

class stack:

def __init__(self):

self.items =

def isempty(self):

return len(self.items) == 0

def push(self, item):

def pop(self):

return self.items.pop()

def peek(self):

if not self.isempty():

return self.items[len(self.items) - 1]

def size(self):

return len(self.items)

def drawpole_3():#畫出漢諾塔的poles

t = turtle.turtle()

t.hideturtle()

def drawpole_1(k):

t.up()

t.pensize(10)

t.speed(100)

t.goto(400*(k-1), 100)

t.down()

t.goto(400*(k-1), -100)

t.goto(400*(k-1)-20, -100)

t.goto(400*(k-1)+20, -100)

drawpole_1(0)#畫出漢諾塔的poles[0]

drawpole_1(1)#畫出漢諾塔的poles[1]

drawpole_1(2)#畫出漢諾塔的poles[2]

def creat_plates(n):#製造n個盤子

plates=[turtle.turtle() for i in range(n)]

for i in range(n):

plates[i].up()

plates[i].hideturtle()

plates[i].shape("square")

plates[i].shapesize(1,8-i)

plates[i].goto(-400,-90+20*i)

plates[i].showturtle()

return plates

def pole_stack():#製造poles的棧

poles=[stack() for i in range(3)]

return poles

def movedisk(plates,poles,fp,tp):#把poles[fp]頂端的盤子plates[mov]從poles[fp]移到poles[tp]

mov=poles[fp].peek()

plates[mov].goto((fp-1)*400,150)

plates[mov].goto((tp-1)*400,150)

l=poles[tp].size()#確定移動到底部的高度(恰好放在原來最上面的盤子上面)

plates[mov].goto((tp-1)*400,-90+20*l)

def movetower(plates,poles,height,frompole, topole, withpole):#遞迴放盤子

if height >= 1:

movetower(plates,poles,height-1,frompole,withpole,topole)

movedisk(plates,poles,frompole,topole)

poles[topole].push(poles[frompole].pop())

movetower(plates,poles,height-1,withpole,topole,frompole)

myscreen=turtle.screen()

drawpole_3()

n=int(input("請輸入漢諾塔的層數並回車:\n"))

plates=creat_plates(n)

poles=pole_stack()

for i in range(n):

poles[0].push(i)

movetower(plates,poles,n,0,2,1)

myscreen.exitonclick()

Python實現漢諾塔

原始碼 move n,a,b,c 這個函式不要理解為abc三個柱子。請這樣理解,move函式,用來完成這麼乙個任務 把n個盤子,從 源柱 通過 過渡柱 移動到 目標柱 上。即move n,source,bridge,destination 為了完成這個任務,需要將此母任務分解為三個子任務 1.把 源...

漢諾塔遞迴 Python

今天繼續學習遞迴 終於 終於把 去年學c語言沒看懂也沒去研究的漢諾塔解決了 感謝網上眾多的老鐵們的資料相助 和 宿舍學長的幫助,好了以下說理解後的思路 1 n 1 第1次 1號盤 a csum 1 次 2 n 2 第1次 1號盤 a b 第2次 2號盤 a c 第3次 1號盤 b c sum 3 次...

Python演算法 漢諾塔

漢諾塔 hanoi tower 又稱河內塔,源於印度乙個古老傳說。大梵天創造世界的時候做了三根金剛石柱子,在一根柱子上從下往上按照大小順序摞著n片 圓盤。大梵天命令婆羅門把圓盤從下面開始按大小順序重新擺放在另一根柱子上。並且規定,任何時候,在小圓盤上都不能放大圓盤,且在三根柱子之間一次只能移動乙個圓...