博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
用 python 解决汉诺塔问题并附带演示过程
阅读量:5160 次
发布时间:2019-06-13

本文共 2023 字,大约阅读时间需要 6 分钟。

一、使用工具 IDLE

二、汉诺塔代码

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

三、运行结果(输入层数为5)

 

 

 

  

 

转载于:https://www.cnblogs.com/shinawear/p/10611431.html

你可能感兴趣的文章
代理模式
查看>>
Confluence 6 系统运行信息中的 JVM 内存使用情况
查看>>
Confluence 6 升级以后
查看>>
用JS实现版面拖拽效果
查看>>
二丶CSS
查看>>
《avascript 高级程序设计(第三版)》 ---第二章 在HTML中使用Javascript
查看>>
Hibernate主键生成策略
查看>>
Crushing Machinery - Strong Support of Cement Enterprise
查看>>
AsyncTask
查看>>
Django框架(十九)—— drf:序列化组件(serializer)
查看>>
JS一些概念知识及参考链接
查看>>
关于JS中&&和||用法技巧
查看>>
TCP/IP协议原理与应用笔记24:网际协议(IP)之 IP协议的简介
查看>>
SAP HANA开发中常见问题- 基于SAP HANA平台的多团队产品研发
查看>>
内部元素一一相应的集合的算法优化,从list到hashmap
查看>>
游戏中的心理学(一):认知失调有前提条件
查看>>
SpringMVC-处理AJAX
查看>>
WHAT I READ FOR DEEP-LEARNING
查看>>
【Ruby】Ruby在Windows上的安装
查看>>
Objective C 总结(十一):KVC
查看>>