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中的实例方法、静态方法、类方法、类变量和实例变量浅析
Apr 26 Python
酷! 程序员用Python带你玩转冲顶大会
Jan 17 Python
Python向MySQL批量插数据的实例讲解
Mar 31 Python
Python实现针对给定字符串寻找最长非重复子串的方法
Apr 21 Python
浅谈Python大神都是这样处理XML文件的
May 31 Python
python 实现提取log文件中的关键句子,并进行统计分析
Dec 24 Python
python爬取王者荣耀全皮肤的简单实现代码
Jan 31 Python
python生成任意频率正弦波方式
Feb 25 Python
基于TensorFlow的CNN实现Mnist手写数字识别
Jun 17 Python
Python requests上传文件实现步骤
Sep 15 Python
Python+OpenCV图像处理——实现直线检测
Oct 23 Python
python中使用 unittest.TestCase单元测试的用例详解
Aug 30 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
地球防卫队:陪着奥特曼打小怪兽的人类力量 那些经典队服
2020/03/08 日漫
PHP5中的时间相差8小时的解决办法
2008/03/28 PHP
PHP链表操作简单示例
2016/10/15 PHP
PHP+mysql实现的三级联动菜单功能示例
2019/02/15 PHP
一个很简单的jquery+xml+ajax的无刷新树结构(无css,后台是c#)
2010/06/02 Javascript
ajax的hide隐藏问题解决方法
2012/12/11 Javascript
Extjs中的GridPanel隐藏列会显示在menuDisabled中解决方法
2013/01/27 Javascript
如何设置一定时间内只能发送一次请求
2014/02/28 Javascript
javascript实现捕捉键盘上按下的键
2015/05/05 Javascript
JavaScript的9种继承实现方式归纳
2015/05/18 Javascript
JavaScript中的bold()方法使用详解
2015/06/08 Javascript
跟我学习javascript的undefined与null
2015/11/17 Javascript
JavaScript实现相册弹窗功能(zepto.js)
2016/06/21 Javascript
Bootstrap字体图标无法正常显示的解决方法
2016/10/08 Javascript
js中获取 table节点各tr及td的内容简单实例
2016/10/14 Javascript
nodejs 生成和导出 word的实例代码
2018/07/31 NodeJs
vue1.0和vue2.0的watch监听事件写法详解
2018/09/11 Javascript
javascript随机变色实例代码
2019/10/15 Javascript
Vue通过provide inject实现组件通信
2020/09/03 Javascript
uniapp微信小程序实现一个页面多个倒计时
2020/11/01 Javascript
javascript实现京东快递单号的查询效果
2020/11/30 Javascript
vue中defineProperty和Proxy的区别详解
2020/11/30 Vue.js
Nodejs实现微信分账的示例代码
2021/01/19 NodeJs
python如何通过protobuf实现rpc
2016/03/06 Python
TensorFlow搭建神经网络最佳实践
2018/03/09 Python
python-docx修改已存在的Word文档的表格的字体格式方法
2018/05/08 Python
python os用法总结
2018/06/08 Python
数组保存为txt, npy, csv 文件, 数组遍历enumerate的方法
2018/07/09 Python
pyqt5 删除layout中的所有widget方法
2019/06/25 Python
python实现大量图片重命名
2020/03/23 Python
毕业研究生的自我鉴定
2013/11/30 职场文书
顶撞领导检讨书
2014/01/29 职场文书
个人授权委托书样本
2014/09/13 职场文书
劳动仲裁撤诉申请书
2015/05/18 职场文书
2016年教师学习廉政准则心得体会
2016/01/20 职场文书
日元符号 ¥
2022/02/17 杂记