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有证书的加密解密实现方法
Nov 19 Python
Python使用matplotlib简单绘图示例
Feb 01 Python
python opencv读mp4视频的实例
Dec 07 Python
Python高斯消除矩阵
Jan 02 Python
Django之无名分组和有名分组的实现
Apr 16 Python
Python 实现取多维数组第n维的前几位
Nov 26 Python
pycharm新建Vue项目的方法步骤(图文)
Mar 04 Python
python实现ftp文件传输系统(案例分析)
Mar 20 Python
django model通过字典更新数据实例
Apr 01 Python
python读取excel进行遍历/xlrd模块操作
Jul 12 Python
python调用百度AI接口实现人流量统计
Feb 03 Python
python中对列表的删除和添加方法详解
Feb 24 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
JS.elementGetStyle(element, style)应用示例
2013/09/24 Javascript
利用NodeJS和PhantomJS抓取网站页面信息以及网站截图
2013/11/18 NodeJs
jQuery实现购物车多物品数量的加减+总价计算
2014/06/06 Javascript
JQuery报错Uncaught TypeError: Illegal invocation的处理方法
2015/03/13 Javascript
jQuery获取某天的农历日期并判断是否除夕或新年的方法
2016/03/01 Javascript
详解Matlab中 sort 函数用法
2016/03/20 Javascript
很实用的js选项卡切换效果
2016/08/12 Javascript
JavaScript之Vue.js【入门基础】
2016/12/06 Javascript
w3c编程挑战_初级脚本算法实战篇
2017/06/23 Javascript
在 Node.js 中使用 async 函数的方法
2017/11/17 Javascript
vue 中引用gojs绘制E-R图的方法示例
2018/08/24 Javascript
jQuery each和js forEach用法比较
2019/02/27 jQuery
详解在HTTPS 项目中使用百度地图 API
2019/04/26 Javascript
node命令行工具之实现项目工程自动初始化的标准流程
2019/08/12 Javascript
解决layui的input独占一行的问题
2019/09/10 Javascript
在 Vue 中编写 SVG 图标组件的方法
2020/02/24 Javascript
vue 使用插槽分发内容操作示例【单个插槽、具名插槽、作用域插槽】
2020/03/06 Javascript
[01:13]DOTA2群星解读国服召集令 一起说出回归的理由
2013/07/17 DOTA
python获得文件创建时间和修改时间的方法
2015/06/30 Python
Python数据结构与算法之字典树实现方法示例
2017/12/13 Python
python3+PyQt5实现文档打印功能
2018/04/24 Python
解决vscode python print 输出窗口中文乱码的问题
2018/12/03 Python
python求加权平均值的实例(附纯python写法)
2019/08/22 Python
python 6.7 编写printTable()函数表格打印(完整代码)
2020/03/25 Python
Pytorch生成随机数Tensor的方法汇总
2020/09/09 Python
CSS3 选择器 伪类选择器介绍
2012/01/21 HTML / CSS
浅谈Html5多线程开发之WebWorkers
2018/05/02 HTML / CSS
行政助理岗位职责范文
2013/12/03 职场文书
简历自我评价怎么写呢?
2014/01/06 职场文书
采购意向书范本
2014/03/31 职场文书
绘画专业自荐信
2014/07/04 职场文书
私人委托书格式
2014/09/10 职场文书
2014年英语工作总结
2014/12/20 职场文书
《棉鞋里的阳光》教学反思
2016/02/20 职场文书
vue3中的组件间通信
2021/03/31 Vue.js
mysql 8.0.27 绿色解压版安装教程及配置方法
2022/04/20 MySQL