漢羅塔動畫實現

2022-08-22 15:51:11 字數 2375 閱讀 1012

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):

ifnot 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"))

n=6plates=creat_plates(n)

poles=pole_stack()

for i in

range(n):

poles[

0].push(i)

movetower(plates,poles,n,

0,2,1

)myscreen.exitonclick()

漢羅塔問題

1.漢諾塔問題描述 有3根柱子a,b,c,a柱上有n個盤子,盤子的大小不等,大的盤子在下,小的盤子在上。要求將a柱上的n個盤子移到c柱上,每次只能移動乙個盤子。在移動過程中,可以借助於任何一根柱子 a b c 但必須保證3根柱子上的盤子都是大的盤子在下,小的盤子在上。2.源程式 注 源程式中的x,y...

漢羅塔問題

漢羅塔的移動序列為2 n 1 次 漢羅塔問題的遞迴解 演算法目的 把是start柱子上的木塊移動到end柱子上 當start柱子上只有兩個圓環時,把兩個圓環放到end柱子上要借助middle柱子,這樣start柱子上有n個圓環時,要先把第n個圓環上的n 1各圓環移動到middle柱子上,然後再把第n...

漢諾塔 動畫過程繪製實現

人工智慧實驗要求 利用狀態空間法,實現漢諾塔求解過程的動畫 將n個盤子,從a柱移到c柱上 這裡是乙個c語言實現控制台繪製的例項,筆者將程式的思想寫了個詳細的注釋,方便大家學習。程式效果圖及思路 這裡的思路是 以三進製資料表示3個盤子的狀態 比如0,1,2分別表示在a,b,c柱子上,一種狀態值為220...