日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python汉诺塔问题_Python汉诺塔问题

發布時間:2023/12/19 python 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python汉诺塔问题_Python汉诺塔问题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

漢諾塔描述

古代有一座漢諾塔,塔內有3個座A、B、C,A座上有n個盤子,盤子大小不等,大的在下,小的在上,如圖所示。有一個和尚想把這n個盤子從A座移到C座,但每次只能移動一個盤子,并且自移動過程中,3個座上的盤子始終保持大盤在下,小盤在上。在移動過程中可以利用B座來放盤子。

代碼:

import turtle

class Stack:

def __init__(self):

self.items = []

def isEmpty(self):

return len(self.items) == 0

def push(self, item):

self.items.append(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汉诺塔问题_Python汉诺塔问题的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。