import turtleclass
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...