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中的深拷贝和浅拷贝详解
Jun 03 Python
下载python中Crypto库报错:ModuleNotFoundError: No module named ‘Crypto’的解决
Apr 23 Python
Python文件循环写入行时防止覆盖的解决方法
Nov 09 Python
Python编程实现tail-n查看日志文件的方法
Jul 08 Python
Python爬虫:url中带字典列表参数的编码转换方法
Aug 21 Python
Python3.7 基于 pycryptodome 的AES加密解密、RSA加密解密、加签验签
Dec 04 Python
PyTorch 随机数生成占用 CPU 过高的解决方法
Jan 13 Python
python tkinter 设置窗口大小不可缩放实例
Mar 04 Python
Pytorch实现将模型的所有参数的梯度清0
Jun 24 Python
关于python tushare Tkinter构建的简单股票可视化查询系统(Beta v0.13)
Oct 19 Python
python之pygame模块实现飞机大战完整代码
Nov 29 Python
Python 的演示平台支持 WSGI 接口的应用
Apr 20 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
简单分析ucenter 会员同步登录通信原理
2014/08/25 PHP
分享一个Laravel好用的Cache宏
2015/03/02 PHP
JS实多级联动下拉菜单类,简单实现省市区联动菜单!
2007/05/03 Javascript
Javascript 布尔型分析
2008/12/22 Javascript
js如何获取object类型里的键值
2014/02/18 Javascript
jquery 无限级下拉菜单的简单实现代码
2014/02/21 Javascript
解决js图片加载时出现404的问题
2020/11/30 Javascript
XML、HTML、CSS与JS的区别整理
2016/02/18 Javascript
最简单的tab切换实例代码
2016/05/13 Javascript
PassWord输入框代码分享
2016/06/07 Javascript
js利用正则表达式检验输入内容是否为网址
2016/07/05 Javascript
微信小程序 支付简单实例及注意事项
2017/01/06 Javascript
bootstrap css样式之表单
2017/01/19 Javascript
微信小程序通过api接口将json数据展现到小程序示例
2017/01/20 Javascript
基于JS实现二维码图片固定在右下角某处并跟随滚动条滚动
2017/02/08 Javascript
Angular2开发环境搭建教程之VS Code
2017/12/15 Javascript
javascript连接mysql与php通过odbc连接任意数据库的实例
2017/12/27 Javascript
基于Nodejs的Tcp封包和解包的理解
2018/09/19 NodeJs
Vue一次性简洁明了引入所有公共组件的方法
2018/11/28 Javascript
微信小程序使用npm包的方法步骤
2019/08/13 Javascript
复制粘贴功能的Python程序
2008/04/04 Python
python select.select模块通信全过程解析
2017/09/20 Python
利用Python-iGraph如何绘制贴吧/微博的好友关系图详解
2017/11/02 Python
Django中日期处理注意事项与自定义时间格式转换详解
2018/08/06 Python
Python装饰器限制函数运行时间超时则退出执行
2019/04/09 Python
pyMySQL SQL语句传参问题,单个参数或多个参数说明
2020/06/06 Python
描述JSP和Servlet的区别、共同点、各自应用的范围
2012/10/02 面试题
会议邀请函范文
2014/01/09 职场文书
商务日语专业的自荐信
2014/05/23 职场文书
实习工作表现评语
2014/12/31 职场文书
2015年部门工作总结范文
2015/03/31 职场文书
反腐倡廉观后感
2015/06/08 职场文书
2019求职信大礼包
2019/05/15 职场文书
竞聘演讲报告:基本写作有哪些?附开头范文
2019/10/16 职场文书
Java由浅入深通关抽象类与接口(上篇)
2022/04/26 Java/Android
Redis基本数据类型哈希Hash常用操作命令
2022/06/01 Redis