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多线程ctrl+c退出问题解决方案
Oct 23 Python
python中list列表的高级函数
May 17 Python
python django 实现验证码的功能实例代码
May 18 Python
Python实现随机选择元素功能
Sep 14 Python
django缓存配置的几种方法详解
Jul 16 Python
在pycharm中python切换解释器失败的解决方法
Oct 29 Python
python实现转圈打印矩阵
Mar 02 Python
在django中实现页面倒数几秒后自动跳转的例子
Aug 16 Python
Django Docker容器化部署之Django-Docker本地部署
Oct 09 Python
Python3 pickle对象串行化代码实例解析
Mar 23 Python
Python之多进程与多线程的使用
Feb 23 Python
整理Python中常用的conda命令操作
Jun 15 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中慎用双等于(==)的详解
2013/06/06 PHP
php实现监听事件
2013/11/06 PHP
PHP使用微信开发模式实现搜索已发送图文及匹配关键字回复的方法
2017/09/13 PHP
JavaScript 一道字符串分解的题目
2011/08/03 Javascript
浅析showModalDialog数据缓存问题(用禁止浏览器缓存解决)
2013/07/09 Javascript
jQuery焦点控制图层展示延迟隐藏的方法
2015/03/09 Javascript
javascript实现画不相交的圆
2015/04/07 Javascript
基于nodejs+express(4.x+)实现文件上传功能
2015/11/23 NodeJs
js获取图片宽高的方法
2015/11/25 Javascript
利用JavaScript实现拖拽改变元素大小
2016/12/14 Javascript
微信小程序 详解下拉加载与上拉刷新实现方法
2017/01/13 Javascript
bootstrapValidator 重新启用提交按钮的方法
2017/02/20 Javascript
React中Ref 的使用方法详解
2020/04/28 Javascript
详解react组件通讯方式(多种)
2020/05/06 Javascript
JavaScript 获取滚动条位置并将页面滑动到锚点
2021/02/08 Javascript
Python时区设置方法与pytz查询时区教程
2013/11/27 Python
Python Web服务器Tornado使用小结
2014/05/06 Python
python编程开发之textwrap文本样式处理技巧
2015/11/13 Python
Python3实现简单可学习的手写体识别(实例讲解)
2017/10/21 Python
Windows环境下python环境安装使用图文教程
2018/03/13 Python
Python中利用LSTM模型进行时间序列预测分析的实现
2019/07/26 Python
Python + Flask 实现简单的验证码系统
2019/10/01 Python
提升python处理速度原理及方法实例
2019/12/25 Python
python 装饰器功能与用法案例详解
2020/03/06 Python
什么是python类属性
2020/06/10 Python
世界上最大的艺术社区:SAA
2020/12/30 全球购物
Nike俄罗斯官方网站:Nike RU
2021/03/05 全球购物
华为慧通笔试题
2016/04/22 面试题
优秀学生干部个人的自我评价
2013/10/04 职场文书
大学毕业寄语大全
2014/04/10 职场文书
酒会开场白大全
2015/06/01 职场文书
车辆管理制度范本
2015/08/05 职场文书
高中班主任培训心得体会
2016/01/07 职场文书
《追风筝的人》:人心中的成见是座大山,但请不忘初心
2019/11/15 职场文书
MySQL之select、distinct、limit的使用
2021/11/11 MySQL
MySQL详解进行JDBC编程与增删改查方法
2022/06/16 MySQL