1.简介

古代有一座汉诺塔,塔内有3个座A、B、C,A座上有n个盘子,盘子大小不等,大的在下,小的在上,如图所示。有一个和尚想把这n个盘子从A座移到C座,但每次只能移动一个盘子,并且自移动过程中,3个座上的盘子始终保持大盘在下,小盘在上。在移动过程中可以利用B座来放盘子。

2.解决方法

解法的基本思想是递归。假设有 A、B、C 三个塔,A 塔有

 块盘,目标是把这些盘全部移到 C 塔。那么先把 A 塔顶部的

 块盘移动到 B 塔,再把 A 塔剩下的大盘移到 C,最后把 B 塔的

 块盘移到 C。

如此递归地使用下去, 就可以求解。

3.实现方法

python非动画实现:

def hanoi(n, a, b, c):

if n == 1:

print(a, '-->', c)

else:

hanoi(n - 1, a, c, b)

hanoi(1 , a, b, c)

hanoi(n - 1, b, a, c)

# 调用

n = input("")

hanoi(n, 'A', 'B', 'C')

python动画实现:

代码最多能运行7阶汉诺塔,不过稍微改一下整体参数还是可以做到“任意”阶数的。主要用了递归和栈的想法,用turtle实现。

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

运行结果:

经典问题(c++/python)素数、杨辉三角(金字塔型)、统计单词数、简单计算器、密码安全程度、凯撒密码加密、汉诺塔 (python课设实验实例)-- biaobiao88

[编写程序,输人一个大于2的自然数,然后输出小于该数字的所有素数组成的列表.]所谓素数,是指除了1和自身之外没有其他因数的自然数,最小的素数是2,后面依次是3.5.7.11.13... c++代码: ...

汉诺塔问题python

count = 0def hanoi(n,src,mid,dst): global count if n == 1: print("{}:{}->{}".format(1,s ...

Python实现汉诺塔问题的可视化(以动画的形式展示移动过程)

学习Python已经有一段时间了,也学习了递归的方法,而能够实践该方法的当然就是汉诺塔问题了,但是这次我们不只是要完成对汉诺塔过程的计算,还要通过turtle库来体现汉诺塔中每一层移动的过程. 一.设 ...

Python实现:汉诺塔问题

汉诺塔问题不管在任何编程语言里都是经典问题,是采用递归算法的经典案例,该问题可以抽象如下: 一 .3根圆柱A,B,C,其中A上面串了n个圆盘 二 .这些圆盘从上到下是按从小到大顺序排列的,大的圆盘任何 ...

Python之汉诺塔递归运算

汉诺塔问题是一个经典的问题.汉诺塔(Hanoi Tower),又称河内塔,源于印度一个古老传说.大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘.大梵天命令婆 ...

javascript实现汉诺塔动画效果

javascript实现汉诺塔动画效果 当初以为不用html5也很简单,踩了javascript单线程的大坑后终于做出来了,没事可以研究下,对理解javascript的执行过程还是很有帮助的,代码很烂 ...

1.python算法之汉诺塔

代码如下: #!/usr/bin/env python # encoding: utf-8 """ @author: 侠之大者kamil @file: 汉诺塔.py @t ...

python解决汉诺塔问题

今天刚刚在博客园安家,不知道写点什么,前两天刚刚学习完python 所以就用python写了一下汉诺塔算法,感觉还行拿出来分享一下 首先看一下描述: from :http://baike.baidu. ...

汉诺塔 python版

汉诺塔问题:如果将n个盘子(由小到大)从a通过b,搬到c,搬运过程中不能出现小盘子在大盘子下面的情况. 思路分析:假设前要移动第100个盘子,分两步走,移动第99个:再移动第100个:而要移动第99个 ...

随机推荐

Unity3D入门之Unity3D介绍以及编辑器的使用(1)

1.Unity3D介绍 Unity3D是跨平台(IOS.Android.Windows Phone.Windows.Flash.XBOX360.PS3.Wii等)游戏引擎,可以开发2D.2.5D.3D ...

利用BitLocker和vhdx创建一个有加密的Win10系统

如果电脑不支持TPM加密BitLocker,就无法对系统盘进行全盘加密. 可以采用一个变通的方法:创建一个vhdx,将这个虚拟磁盘进行BitLocker加密,然后在这个盘里安装操作系统,最后把vhdx ...

hdu 4643(计算几何)

题意:容易理解 分析:切换的地点为两个基站所在直线的中垂线与两座城市所在直线的交点. 代码实现: #include #include #inc ...

angular js 实例参数学习

React文档(十七)非受控组件

大多数情况下,我们建议使用受控组件(也就是用React的state来控制表单元素的value值)来实现表单.在一个受控组件里,表单数据被React组件处理.另一种方案就是非控制组件,这样的话表单数据就 ...

搭建LDAP服务器

1. 使用SSH 登陆服务器. 2. 更新有效的包. sudo apt-get update 3. 安装LDAP和一些其它LDAP相关的工具. sudo apt-get install slapd l ...

centos7 重启网卡报错

systemctl restart network 时候报错: rtnetlink answers file exists 是network和NetworkManager冲突了 一般建议直接 syst ...

汉诺塔实践python_汉诺塔的python 动画演示相关推荐

  1. 汉诺塔实践python_Python-汉诺塔问题

    概述: 据说古代有一个梵塔,塔内有三个底座A.B.C,A座上有64个盘子,盘子大小不等,大的在下,小的在上. 有一个和尚想把这64个盘子从A座移到C座,但每次只能允许移动一个盘子,在移动盘子的过程中可 ...

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

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

  3. python汉诺塔_汉诺塔递归算法/搬金盘的婆罗门 - Python实现

    汉诺塔递归算法/搬金盘的婆罗门 - Python实现 版权声明 本文节选自作者本人的图书<Python编程基础及应用>,高等教育出版社.本文可以在互联网上自由转载,但必须:注明出处(作者: ...

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

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

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

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

  6. 汉诺塔问题(分治+源码+动画演示)

    汉诺塔问题(分治+源码+动画演示) 汉诺塔问题源自印度一个古老的传说,印度教的"创造之神"梵天创造世界时做了 3 根金刚石柱,其中的一根柱子上按照从小到大的顺序摞着 64 个黄金圆 ...

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

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

  8. 汉诺塔递归算法/搬金盘的婆罗门 - Python实现

    汉诺塔递归算法/搬金盘的婆罗门 - Python实现 本文引用自作者编写的下述图书; 本文允许以个人学习.教学等目的引用.讲授或转载,但需要注明原作者"海洋饼干叔 叔":本文不允许 ...

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

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

最新文章

  1. metrics-server最新版本有坑,慎用
  2. [ 墨者学院 ] 命令执行——Bash漏洞分析溯源
  3. 【C++】Visual Studio教程(七) -修改 Visual Studio
  4. 放弃winform的窗体吧,改用html作界面,桌面应用程序UI的新的开发方式。
  5. VSCode前端文件(html文件)如何以服务器模式打开?
  6. 快速批量执行redis命令
  7. 光电编码器与计算机连接模块,光电编码器原理及应用电路-20210310075025.docx--原创力文档...
  8. 红米k30s 至尊纪念版本看闪存型号 硬盘型号
  9. python 进阶语法-文件 5 道练习题 | Python技能树征题
  10. matplotlib之pyplot模块——填充两条曲线之间区域(fill_between、fill_betweenx)
  11. Python解答多元线性方程组
  12. 大数据薪水大概多少_大数据工程师工资待遇一般多少?高吗
  13. thinkphp3.2乐观锁源码解读与优化
  14. FA-关于固定资产的类别重分类
  15. Ubuntu16.04中安装Kermit
  16. 《机器学习》 线性模型
  17. 南京大学软件工程842参考书攻略
  18. 查询跟踪快递物流,筛选因拒收退回的单号
  19. 百度云盘云知梦php_[云知梦]WEB前端开发_WEB前端新手入门视频教程[百度云盘]
  20. 职场写作(一)怎么让写作促成结果

热门文章

  1. 【论文逐句精读】DeepWalk,随机游走实现图向量嵌入,自然语言处理与图的首次融合
  2. docker网络模式
  3. 27. 处理网站验证码:处理网站登录验证码(selenium+破解工具)
  4. 网游防沉迷:一条摆设的马其诺防线
  5. 关于编辑器QScintilla(Scintilla)词法分析器工作原理的分析(实现注释区分)
  6. 一文让你搞懂 Python 的 pyc 文件
  7. ip route 命令详解
  8. 【Python】Python 项目目录结构
  9. html5好看的注册页面设计,Material Design风格用户注册登录界面设计
  10. glViewport()函数和glOrtho()函数的理解