汉诺塔描述

古代有一座汉诺塔,塔内有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汉诺塔问题相关推荐

  1. python面向过程实践汉诺塔_递归汉诺塔-和递归汉诺塔相关的内容-阿里云开发者社区...

    多柱汉诺塔最优算法设计探究 多柱汉诺塔最优算法设计探究 引言 汉诺塔算法一直是算法设计科目的最具代表性的研究问题,本文关注于如何设计多柱汉诺塔最优算法的探究.最简单的汉诺塔是三个柱子(A.B.C),因 ...

  2. 汉诺塔实践python_汉诺塔的python 动画演示

    1.简介 古代有一座汉诺塔,塔内有3个座A.B.C,A座上有n个盘子,盘子大小不等,大的在下,小的在上,如图所示.有一个和尚想把这n个盘子从A座移到C座,但每次只能移动一个盘子,并且自移动过程中,3个 ...

  3. 汉诺塔系列问题: 汉诺塔II、汉诺塔III、汉诺塔IV、汉诺塔V、汉诺塔VI、汉诺塔VII

    汉诺塔II:(hdu1207) /先说汉若塔I(经典汉若塔问题),有三塔,A塔从小到大从上至下放有N个盘子,现在要搬到目标C上, 规则小的必需放在大的上面,每次搬一个,求最小步数.这个问题简单,DP: ...

  4. 【递推】HDU1207汉诺塔II 【汉诺塔及汉诺塔变形 归纳】

    汉诺塔问题 设f(n)为移动n层的汉诺塔的解,则整个过程其实分为三步: 把n-1层移到第二个上面去(花费f(n-1)) 把最大的移到第三个柱子上面去(花费1) 把n-1层移动到第三个柱子上去(花费f( ...

  5. 7-251 汉诺塔问题7-252 汉诺塔移动次数

    目录 7-251 汉诺塔问题 7-252 汉诺塔移动次数 7-251 汉诺塔问题 分数 100 全屏浏览题目 切换布局 作者 于延 单位 哈尔滨师范大学 任务描述 在印度,有这么一个古老的传说:在世界 ...

  6. 算法之路(四)----汉诺塔(又称河内之塔)

    汉诺塔是很简单也很经典的算法之一. 汉诺塔是根据一个传说形成的数学问题: 有三根杆子A,B,C .A杆上有N个(N>1)穿孔圆盘,盘的尺寸由下到上依次变小.要求按下列规则将所有圆盘移至C杆: * ...

  7. 每天一算法(双色河内塔又叫汉诺塔)

    说明 双色河内塔是由之前所介绍过的河内塔规则衍生而来,双色河内塔的目的是将下图左上的圆环位置经移动成为右下的圆环位置: 解法 双色河内塔或是原始的河内塔,其解法观念与之前介绍过的河内塔是类似的,同样也 ...

  8. python英汉字典,Python基于有道实现英汉字典功能,python英汉字典

    Python基于有道实现英汉字典功能,python英汉字典 本文实例讲述了Python基于有道实现英汉字典功能的方法.分享给大家供大家参考.具体如下: import re,urllib aa=&quo ...

  9. python 玩公众号游戏_Python入门太难?不如从玩塔防小游戏开始,玩通关就能学会编程...

    我一直认为,在python入门阶段学习基础理论,太枯燥.所以我们整理了很多有关python的项目案例,有详细教程还有源码,希望能帮助更多对python感兴趣的人. 这是其中一个适合入门的Python项 ...

最新文章

  1. Python 标准库之 datetime
  2. 错误:ORA-28002: the password will expire within 7 da
  3. WinCE系统的编译过程详解
  4. Win7旗舰版系统时间不准确怎么办
  5. leetcode9. 回文数
  6. 机器人枪杀人类的时刻到了
  7. 使用apktool.jar工具反编译和回编译Android APK 终端命令模式
  8. MATLAB中定积分的求解
  9. 2016/11/23【转载3】USB OTG 引脚定义
  10. linux火狐快捷键设置,使用火狐浏览器所有的快捷键大全
  11. 使用Fiddler抓取安卓手机APP链接
  12. 从数学计算上分析人脑与电脑差异
  13. 为生还者庆幸,为往生者祈祷
  14. java计算机毕业设计政府人才机构在线考试系统2021源码+mysql数据库+系统+lw文档+部署
  15. fastapi官方文档翻译 -目录
  16. 单代号网络图计算例题_最新(免锁版)网络图横道图绘制软件,内附安装教程,制图做更快...
  17. 使用VScode连接阿里云远程服务器
  18. 【加餐】如何在SteamVR 2 中替换手部模型
  19. win8.1 android 双系统,图文详解Win8.1安装双系统的步骤
  20. PHP 匹配最新手机号运营商

热门文章

  1. SAP UI5 初学者教程之十四 - 嵌入视图的使用方式试读版
  2. SAP Commerce Cloud CMS 里的一些元素类型
  3. 如何使用 SAP CDS view 中的 currency conversion 功能
  4. 安装 SAP Cloud Application Programming SDK @sap/cds-dk 时报错以及解决方案
  5. SAP Spartacus B2B 页面的 Popup Component
  6. scss 里的 Mixins 用法介绍
  7. 用JavaScript实现的设计模式之commandline(命令行)模式
  8. SAP Fiori 1.0 Migrate to Fiori 2.0
  9. CRM Fiori:Complex note optimization design
  10. 调用Hybris API时遇到的错误消息Cannot find user with uid如何解决