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执行系统命令的常见方法(全)
Oct 22 Python
Python制作简易注册登录系统
Dec 15 Python
django 将model转换为字典的方法示例
Oct 16 Python
pandas.DataFrame删除/选取含有特定数值的行或列实例
Nov 07 Python
Python txt文件加入字典并查询的方法
Jan 15 Python
Python批量生成幻影坦克图片实例代码
Jun 04 Python
三步实现Django Paginator分页的方法
Jun 11 Python
pycharm编写spark程序,导入pyspark包的3中实现方法
Aug 02 Python
Pytorch使用PIL和Numpy将单张图片转为Pytorch张量方式
May 25 Python
浅谈numpy中函数resize与reshape,ravel与flatten的区别
Jun 18 Python
Python代码执行时间测量模块timeit用法解析
Jul 01 Python
Django Admin后台模型列表页面如何添加自定义操作按钮
Nov 11 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+mysql扎实个人基本功
2008/03/27 PHP
如何突破PHP程序员的技术瓶颈分析
2011/07/17 PHP
兼容ie6浏览器的php下载文件代码分享
2014/07/14 PHP
thinkPHP数据查询常用方法总结【select,find,getField,query】
2017/03/15 PHP
TP5框架页面跳转样式操作示例
2020/04/05 PHP
javascript 动态数据下的锚点错位问题解决方法
2008/12/24 Javascript
Tab页界面,用jQuery及Ajax技术实现
2009/09/21 Javascript
解决jquery的datepicker的本地化以及Today问题
2012/05/23 Javascript
JavaScript使用HTML5的window.postMessage实现跨域通信例子
2014/04/11 Javascript
jQuery选择器源码解读(五):tokenize的解析过程
2015/03/31 Javascript
JavaScript如何动态创建table表格
2020/08/02 Javascript
简单谈谈javascript中this的隐式绑定
2016/02/22 Javascript
原生js获取元素样式的简单方法
2016/08/06 Javascript
jquery获取input type=text中的值的各种方式(总结)
2016/12/02 Javascript
Bootstrap的基本应用要点浅析
2016/12/19 Javascript
AngularJS中的缓存使用
2017/01/11 Javascript
JavaScript轻松创建级联函数的方法示例
2017/02/10 Javascript
利用原生js实现html5小游戏之打砖块(附源码)
2018/01/03 Javascript
layer弹出层父子页面事件相互调用方法
2018/08/17 Javascript
Vue安装浏览器开发工具的步骤详解
2019/05/12 Javascript
详解将微信小程序接口Promise化并使用async函数
2019/08/05 Javascript
Vue.js下拉菜单组件使用方法详解
2019/10/19 Javascript
JS数组转字符串实现方法解析
2020/09/04 Javascript
Python解析网页源代码中的115网盘链接实例
2014/09/30 Python
Python类属性与实例属性用法分析
2015/05/09 Python
Django objects.all()、objects.get()与objects.filter()之间的区别介绍
2017/06/12 Python
Python cookbook(数据结构与算法)将名称映射到序列元素中的方法
2018/03/22 Python
详解Python发送email的三种方式
2018/10/18 Python
Python使用os.listdir()和os.walk()获取文件路径与文件下所有目录的方法
2019/04/01 Python
python+pygame实现坦克大战
2019/09/10 Python
基于python纯函数实现井字棋游戏
2020/05/27 Python
python定义类的简单用法
2020/07/24 Python
致跳高运动员广播稿
2014/01/13 职场文书
政府班子四风问题整改措施
2014/10/04 职场文书
单位领导婚礼致辞
2015/07/28 职场文书
消防演习感想
2015/08/10 职场文书