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 相关文章推荐
python 查找字符串是否存在实例详解
Jan 20 Python
Python实现将16进制字符串转化为ascii字符的方法分析
Jul 21 Python
详解 Python中LEGB和闭包及装饰器
Aug 03 Python
tf.truncated_normal与tf.random_normal的详细用法
Mar 05 Python
Python实现判断一行代码是否为注释的方法
May 23 Python
Python3用tkinter和PIL实现看图工具
Jun 21 Python
通过python改变图片特定区域的颜色详解
Jul 15 Python
pandas中DataFrame修改index、columns名的方法示例
Aug 02 Python
在python tkinter界面中添加按钮的实例
Mar 04 Python
Django视图类型总结
Feb 17 Python
python实现银行账户系统
Feb 22 Python
利用python调用摄像头的实例分析
Jun 07 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
解析Win7 XAMPP apache无法启动的问题
2013/06/26 PHP
PHP浮点数的一个常见问题
2016/03/10 PHP
PHP  实现等比压缩图片尺寸和大小实例代码
2016/10/08 PHP
thinkphp5.1框架实现格式化mysql时间戳为日期的方式小结
2019/10/10 PHP
Laravel框架下的Contracts契约详解
2020/03/17 PHP
实现png图片和png背景透明(支持多浏览器)的方法
2009/09/08 Javascript
使用JavaScript switch case 另类写法
2010/03/14 Javascript
给jqGrid数据行添加修改和删除操作链接(之一)
2011/11/04 Javascript
jQuery实现随意改变div任意属性的名称和值(部分原生js实现)
2013/05/28 Javascript
使用JS取得焦点(focus)元素代码
2014/03/22 Javascript
JS获取Table中td值的方法
2015/03/19 Javascript
基于jQuery+JSON的省市二三级联动效果
2015/06/05 Javascript
javascript带回调函数的异步脚本载入方法实例分析
2015/07/02 Javascript
jquery实现漫天雪花飞舞的圣诞祝福雪花效果代码分享
2015/08/20 Javascript
如何解决IONIC页面底部被遮住无法向上滚动问题
2016/09/06 Javascript
js仿搜狐视频记录片列表展示效果
2020/05/30 Javascript
vue.js项目打包上线的图文教程
2017/11/16 Javascript
JavaScript实现计算多边形质心的方法示例
2018/01/31 Javascript
uniapp电商小程序实现订单30分钟倒计时
2020/11/01 Javascript
vant自定义二级菜单操作
2020/11/02 Javascript
vue项目中openlayers绘制行政区划
2020/12/24 Vue.js
[01:06] DOTA2英雄背景故事第三期之秩序法则光之守卫
2020/07/07 DOTA
Python实现网站文件的全备份和差异备份
2014/11/30 Python
python base64 decode incorrect padding错误解决方法
2015/01/08 Python
详解Python中的正斜杠与反斜杠
2019/08/09 Python
Python中的全局变量如何理解
2020/06/04 Python
Python3安装模块报错Microsoft Visual C++ 14.0 is required的解决方法
2020/07/28 Python
利用Python实现朋友圈中的九宫格图片效果
2020/09/03 Python
Python random模块的使用示例
2020/10/10 Python
css3实现文字扫光渐变动画效果的示例
2017/11/07 HTML / CSS
HTML5画渐变背景图片并自动下载实现步骤
2013/11/18 HTML / CSS
经典的班主任推荐信
2013/10/28 职场文书
大明湖导游词
2015/02/03 职场文书
python基础学习之递归函数知识总结
2021/05/26 Python
Nebula Graph解决风控业务实践
2022/03/31 MySQL
索尼ICF-5900W收音机测评
2022/04/24 无线电