python求解汉诺塔游戏


Posted in Python onJuly 09, 2020

本文实例为大家分享了python求解汉诺塔游戏的具体代码,供大家参考,具体内容如下

一、问题定义

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

例如,如果黄金圆盘只有3片,则为了满足游戏规则,那么必须按照如下图所示的8个步骤完成:

python求解汉诺塔游戏

二、代码实现

# 将n个盘子借助y柱从x柱移动到z柱
def hanoi(n, x, y, z):

 count = 0
 if n == 1: # 递归出口
  print(x, ' --> ', z)
  return 1
 else:
  # 将前n - 1个盘子借助z柱从x柱移动到y柱上
  count += hanoi(n - 1, x, z, y) # 递归调用

  # 将最底下的1个盘子从x柱移动到z柱上
  count += hanoi(1, x, y, z)

  # 将n - 1个盘子借助x柱从y柱移动到z柱上
  count += hanoi(n - 1, y, x, z) # 递归调用

  return count


def main():

 hanoi_level = input("请输入汉诺塔层数:")
 print("总共移动次数为%d" % hanoi(int(hanoi_level), 'X', 'Y', 'Z'))


if __name__ == '__main__':
 main()

当黄金圆盘为4层时,代码的输出结果为:

请输入汉诺塔层数:4
X --> Y
X --> Z
Y --> Z
X --> Y
Z --> X
Z --> Y
X --> Y
X --> Z
Y --> Z
Y --> X
Z --> X
Y --> Z
X --> Y
X --> Z
Y --> Z
总共移动次数为15

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
pymongo为mongodb数据库添加索引的方法
May 11 Python
在python中利用GDAL对tif文件进行读写的方法
Nov 29 Python
python 获取页面表格数据存放到csv中的方法
Dec 26 Python
Python面向对象程序设计示例小结
Jan 30 Python
python3 json数据格式的转换(dumps/loads的使用、dict to str/str to dict、json字符串/字典的相互转换)
Apr 01 Python
详解pandas DataFrame的查询方法(loc,iloc,at,iat,ix的用法和区别)
Aug 02 Python
详解python uiautomator2 watcher的使用方法
Sep 09 Python
python绘制规则网络图形实例
Dec 09 Python
Django调用支付宝接口代码实例详解
Apr 04 Python
django美化后台django-suit的安装配置操作
Jul 12 Python
python如何绘制疫情图
Sep 16 Python
selenium.webdriver中add_argument方法常用参数表
Apr 08 Python
Django中Aggregation聚合的基本使用方法
Jul 09 #Python
Python  word实现读取及导出代码解析
Jul 09 #Python
推荐技术人员一款Python开源库(造数据神器)
Jul 08 #Python
实例讲解Python 迭代器与生成器
Jul 08 #Python
opencv 阈值分割的具体使用
Jul 08 #Python
如何表示python中的相对路径
Jul 08 #Python
如何卸载python插件
Jul 08 #Python
You might like
扩展你的 PHP 之入门篇
2006/12/04 PHP
一个漂亮的php验证码类(分享)
2013/08/06 PHP
PHP中SESSION的注销与清除
2015/04/16 PHP
关于ThinkPhp 框架表单验证及ajax验证问题
2017/07/19 PHP
Laravel5框架添加自定义辅助函数的方法
2018/08/01 PHP
jQuery 全选效果实现代码
2009/03/23 Javascript
javascript中创建对象的三种常用方法
2010/12/30 Javascript
Uglifyjs(JS代码优化工具)入门 安装使用
2020/04/13 Javascript
jquery使用jxl插件导出excel示例
2014/04/14 Javascript
javascript中setTimeout的问题解决方法
2014/05/08 Javascript
JQuery弹出层示例可自定义
2014/05/19 Javascript
利用原生JavaScript获取元素样式只是获取而已
2014/10/08 Javascript
JS动态修改图片的URL(src)的方法
2015/04/01 Javascript
全面了解构造函数继承关键apply call
2016/07/26 Javascript
JS遍历ul下的li点击弹出li的索引的实现方法
2016/09/19 Javascript
如何解决vue与传统jquery插件冲突
2017/03/20 Javascript
js实现数组和对象的深浅拷贝
2017/09/30 Javascript
javascript中神奇的 Date对象小结
2017/10/12 Javascript
angular 服务随记小结
2019/05/06 Javascript
JavaScript实现单英文金山打字通
2020/07/24 Javascript
Vue+Element实现网页版个人简历系统(推荐)
2019/12/31 Javascript
js中火星坐标、百度坐标、WGS84坐标转换实现方法示例
2020/03/02 Javascript
微信小程序中使用 async/await的方法实例分析
2020/05/06 Javascript
复制粘贴功能的Python程序
2008/04/04 Python
python 网络编程详解及简单实例
2017/04/25 Python
基于Python实现的微信好友数据分析
2018/02/26 Python
pycharm 将python文件打包为exe格式的方法
2019/01/16 Python
10款最好的Python开发编辑器
2019/07/03 Python
python中利用matplotlib读取灰度图的例子
2019/12/07 Python
浅谈图像处理中掩膜(mask)的意义
2020/02/19 Python
Python pysnmp使用方法及代码实例
2020/08/24 Python
python利用线程实现多任务
2020/09/18 Python
教师申诉制度
2014/01/29 职场文书
8和9的加减法教学反思
2014/05/01 职场文书
工作所在部门证明
2014/09/21 职场文书
《刷子李》教学反思
2016/02/20 职场文书