一、用动画实现汉诺塔问题:

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

  

二、汉诺塔问题

有三个座A、B、C,A座有n个盘子,要求把A座上的n个盘子移动到C座上,每次只能移动一个盘子,并且移动过程中始终保持大盘在下,小盘在上,在移动过程中可以利用B盘来放盘子

输出格式:输出移动的步骤,每行一步,如从A座移动到C盘,输出“A-->C”

def hanoi(n,x,y,z):
if n==1:
print(x,'-->',z)
else:
hanoi(n-1,x,z,y)
hanoi(1,x,y,z)
hanoi(n-1,y,x,z)
n=int(input())
hanoi(n,'A','B','C')

  

最新文章

  1. 我人生中的jQuery选择器
  2. C++的深拷贝与浅拷贝
  3. 开发中可能会用到的几个 jQuery 小提示和技巧
  4. PLSQL_数据泵导入导出数据Impdp/ Expdp(概念)
  5. Sina App Engine(SAE)入门教程(1)
  6. bzoj1391
  7. php 站内搜索 多表 分页
  8. JS 引擎的执行机制
  9. BZOJ4554 - [TJOI2016&HEOI2016]游戏
  10. nfc开发
  11. 【开源分享】微信营销系统(第三方微信平台)github 开源
  12. https协议的简单理解
  13. Troubleshooting ORA-12547 TNS: Lost Contact (Doc ID 555565.1)
  14. eclipse导入Tomcat8源码
  15. LambdaAOP
  16. UVM中的sequence使用(一)
  17. 数组类型的退化Decay
  18. Python - 入门基础(一)
  19. 使用ScrapySharp快速从网页中采集数据
  20. python常用模块之shutil模块

热门文章

  1. shell命令之巧用cut
  2. 拒绝老土!暗黑风格半透平面化主题—InfinityFreedom正式发布
  3. docker环境中neo4j导入导出
  4. nodejs开发准备工作(1)
  5. RabbitMQ的发布订阅模式(Publish/Subscribe)
  6. Excel非常规快捷键
  7. LiteAI四大技术"杀手锏",解锁物联网智能设备AI开发难关
  8. 2018-06-21 js正则表达式
  9. 容器技术之LXC WEB管理工具LXC WEB Panel
  10. 万字长文!一次性弄懂 Nginx 处理 HTTP 请求的 11 个阶段