python实现汉诺塔方法汇总


Posted in Python onJuly 25, 2016

学习python遇到的第一个问题:汉诺塔问题的实现。首先是不知道什么是汉诺塔问题,然后是不知道怎么实现。于是百度了下,结果如下:

汉诺塔:汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘

方法一:

def move(n,a,b,c)    # n=2
  if n==1 :      # 跳过
    print a,'-->',c
    return None
  move(n-1,a,c,b)  # n=2,执行n-1后,move(n-1,a,c,b)->move(1,a,c,b),跳到if处,执行print:a-->b
  print a,'-->',c  # 执行print,这里的a和c是指定义的函数的参数a和c,打印结果是:a-->c
  move(n-1,b,a,c)  # n=1 ,执行n-1后,跳到if处,执行print,此时,a=b,c=c,结果是:b-->c
move(2,'a','b','c')

方法二:

def printMove(fr,to):
  print 'move from ' + str(fr) + ' to ' + str(to)
 
def Towers(n,fr,to,spare):
  if n == 1:
    printMove(fr,to)
  else:
    Towers(n-1,fr,spare,to)
    Towers(1,fr,to,spare)
    Towers(n-1,spare,to,fr)

方法三:

def hanoi(n,x,y,z):
if n==1:
print(x,'-->',z)
else:
hanoi(n-1,x,z,y)#将前n-1个盘子从x移动到y上
hanoi(1,x,y,z)#将最底下的最后一个盘子从x移动到z上
hanoi(n-1,y,x,z)#将y上的n-1个盘子移动到z上
n=int(input('请输入汉诺塔的层数:'))
hanoi(n,'x','y','z')

总结下:

# 汉诺塔思想笔记
# 认识汉诺塔的目标:把A柱子上的N个盘子移动到C柱子
# 递归的思想就是把这个目标分解成三个子目标
# 子目标1:将前n-1个盘子从a移动到b上
# 子目标2:将最底下的最后一个盘子从a移动到c上
# 子目标3:将b上的n-1个盘子移动到c上
# 然后每个子目标又是一次独立的汉诺塔游戏,也就可以继续分解目标直到N为1

Python 相关文章推荐
跨平台python异步回调机制实现和使用方法
Nov 26 Python
python文件操作整理汇总
Oct 21 Python
python文件读写操作与linux shell变量命令交互执行的方法
Jan 14 Python
Python的Flask框架中实现登录用户的个人资料和头像的教程
Apr 20 Python
Python2.x中文乱码问题解决方法
Jun 02 Python
Python实现通过文件路径获取文件hash值的方法
Apr 29 Python
wxPython之解决闪烁的问题
Jan 15 Python
Python GUI Tkinter简单实现个性签名设计
Jun 19 Python
Python3 pip3 list 出现 DEPRECATION 警告的解决方法
Feb 16 Python
Python中如何将一个类方法变为多个方法
Dec 30 Python
使用TensorFlow对图像进行随机旋转的实现示例
Jan 20 Python
Python中的全局变量如何理解
Jun 04 Python
python魔法方法-属性访问控制详解
Jul 25 #Python
python魔法方法-属性转换和类的表示详解
Jul 22 #Python
wxpython中自定义事件的实现与使用方法分析
Jul 21 #Python
wxpython中Textctrl回车事件无效的解决方法
Jul 21 #Python
Python实现Sqlite将字段当做索引进行查询的方法
Jul 21 #Python
python装饰器初探(推荐)
Jul 21 #Python
python魔法方法-自定义序列详解
Jul 21 #Python
You might like
如何跨站抓取别的站点的页面的补充
2006/10/09 PHP
JS 网站性能优化笔记
2011/05/24 PHP
PHP图片裁剪函数(保持图像不变形)
2014/05/04 PHP
php+jQuery.uploadify实现文件上传教程
2014/12/26 PHP
php和C#的yield迭代器实现方法对比分析
2019/07/17 PHP
Yii框架参数配置文件params用法实例分析
2019/09/11 PHP
laravel 如何实现引入自己的函数或类库
2019/10/15 PHP
event对象获取方法总结在google浏览器下测试
2013/11/03 Javascript
nodejs实现的一个简单聊天室功能分享
2014/12/06 NodeJs
JavaScript数组去重的3种方法和代码实例
2015/07/01 Javascript
总结Javascript中数组各种去重的方法
2016/10/04 Javascript
JS button按钮实现submit按钮提交效果
2016/11/01 Javascript
bootstrap table配置参数例子
2017/01/05 Javascript
jQuery Form表单取值的方法
2017/01/11 Javascript
vue项目常用组件和框架结构介绍
2017/12/24 Javascript
微信小程序实现form表单本地储存数据
2019/06/27 Javascript
js实现移动端吸顶效果
2020/01/08 Javascript
python算法学习之基数排序实例
2013/12/18 Python
python妹子图简单爬虫实例
2015/07/07 Python
pandas修改DataFrame列名的方法
2018/04/08 Python
python hashlib加密实现代码
2019/10/17 Python
python文字转语音的实例代码分析
2019/11/12 Python
如何使用Python处理HDF格式数据及可视化问题
2020/06/24 Python
python中doctest库实例用法
2020/12/31 Python
Room Mate Hotels美国:西班牙酒店品牌
2018/04/10 全球购物
MADE法国:提供原创设计师家具
2018/09/18 全球购物
医学护理系毕业生求职信
2013/10/01 职场文书
团工委书记自荐书范文
2013/12/17 职场文书
《恐龙》教学反思
2014/04/27 职场文书
股东出资证明书范例
2014/10/04 职场文书
2015年推普周活动方案
2015/05/06 职场文书
舌尖上的中国观后感
2015/06/02 职场文书
五年级作文之成长
2019/09/16 职场文书
MySQL 数据恢复的多种方法汇总
2021/06/21 MySQL
详解Java实现数据结构之并查集
2021/06/23 Java/Android
MySQL数据库配置信息查看与修改方法详解
2022/06/25 MySQL