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中使用cookielib和urllib2配合PyQuery抓取网页信息
Apr 25 Python
约瑟夫问题的Python和C++求解方法
Aug 20 Python
python安装PIL模块时Unable to find vcvarsall.bat错误的解决方法
Sep 19 Python
python中安装模块包版本冲突问题的解决
May 02 Python
一文带你了解Python中的字符串是什么
Nov 20 Python
python 图像平移和旋转的实例
Jan 10 Python
基于OpenCV python3实现证件照换背景的方法
Mar 22 Python
Django框架自定义session处理操作示例
May 27 Python
使用Python画出小人发射爱心的代码
Nov 23 Python
Python: 传递列表副本方式
Dec 19 Python
解决Keras 中加入lambda层无法正常载入模型问题
Jun 16 Python
FP-growth算法发现频繁项集——发现频繁项集
Jun 24 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
PHP将字符分解为多个字符串的方法
2014/11/22 PHP
学习php设计模式 php实现单例模式(singleton)
2015/12/07 PHP
php+ajax实现无刷新文件上传功能(ajaxuploadfile)
2018/02/11 PHP
java解析json方法总结
2019/05/16 PHP
自己的js工具 Event封装
2009/08/21 Javascript
javascript中match函数的用法小结
2014/02/08 Javascript
js+css实现tab菜单切换效果的方法
2015/01/20 Javascript
javascript编写实用的省市选择器
2015/02/12 Javascript
javascript中sort() 方法使用详解
2015/08/30 Javascript
Hallo.js基于jQuery UI所见即所得的Web编辑器
2016/01/26 Javascript
通过Tabs方法基于easyUI+bootstrap制作工作站
2016/03/28 Javascript
判断是否存在子节点的实现代码
2016/05/18 Javascript
解决Linux无法正常安装与卸载Node.js的方法
2018/01/19 Javascript
JS中数据结构之栈
2019/01/01 Javascript
Vue指令指令大全
2019/02/09 Javascript
vue spa应用中的路由缓存问题与解决方案
2019/05/31 Javascript
JAVA面试题 static关键字详解
2019/07/16 Javascript
js实现九宫格抽奖
2020/03/19 Javascript
vue3.0自定义指令(drectives)知识点总结
2020/12/27 Vue.js
Python Requests安装与简单运用
2016/04/07 Python
完美解决python遍历删除字典里值为空的元素报错问题
2016/09/11 Python
Python中数组,列表:冒号的灵活用法介绍(np数组,列表倒序)
2018/04/18 Python
Python获取时间范围内日期列表和周列表的函数
2019/08/05 Python
使用python实现对元素的长截图功能
2019/11/14 Python
Python测试线程应用程序过程解析
2019/12/31 Python
python有序查找算法 二分法实例解析
2020/02/18 Python
python标准库OS模块详解
2020/03/10 Python
HTML5是否真的可以取代Flash
2010/02/10 HTML / CSS
毕业学生推荐信
2013/12/01 职场文书
母亲七十大寿答谢词
2014/01/18 职场文书
马智宇结婚主持词
2014/04/01 职场文书
职业生涯规划书前言
2014/04/15 职场文书
大学社团活动总结
2014/04/26 职场文书
英文产品推荐信
2015/03/27 职场文书
大学运动会通讯稿
2015/07/18 职场文书
创业项目大全(适合在家创业的项目)
2019/08/15 职场文书