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中Django框架下的staticfiles使用简介
May 30 Python
Python使用PDFMiner解析PDF代码实例
Mar 27 Python
Python3 处理JSON的实例详解
Oct 29 Python
python中dict使用方法详解
Jul 17 Python
Python 如何提高元组的可读性
Aug 26 Python
使用Django搭建一个基金模拟交易系统教程
Nov 18 Python
python 变量初始化空列表的例子
Nov 28 Python
Python 实现黑客帝国中的字符雨的示例代码
Feb 20 Python
django实现更改数据库某个字段以及字段段内数据
Mar 31 Python
服务器端jupyter notebook映射到本地浏览器的操作
Apr 14 Python
python实现逢七拍腿小游戏的思路详解
May 26 Python
Python中socket网络通信是干嘛的
May 27 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
将酷狗krc歌词解析并转换为lrc歌词php源码
2014/06/20 PHP
ThinkPHP实现图片上传操作的方法详解
2017/05/08 PHP
发布BlueShow v1.0 图片浏览器(类似lightbox)blueshow.js 打包下载
2007/07/21 Javascript
收藏Javascript中常用的55个经典技巧
2007/08/12 Javascript
javascript 面向对象编程基础 多态
2009/08/21 Javascript
用最通俗易懂的代码帮助新手理解javascript闭包 推荐
2012/03/01 Javascript
如何使用Javascript获取距今n天前的日期
2013/07/08 Javascript
Jquery常用的方法汇总
2015/09/01 Javascript
JavaScript学习笔记(三):JavaScript也有入口Main函数
2015/09/12 Javascript
Bootstrap风格的zTree右键菜单
2017/02/17 Javascript
JavaScript数据类型和变量_动力节点Java学院整理
2017/06/26 Javascript
微信小程序button组件使用详解
2018/01/31 Javascript
vue实现弹框遮罩点击其他区域弹框关闭及v-if与v-show的区别介绍
2018/09/29 Javascript
Element Input组件分析小结
2018/10/11 Javascript
Map与WeakMap类型在JavaScript中的使用详解
2020/11/18 Javascript
[02:20]DOTA2亚洲邀请赛 EHOME战队出场宣传片
2015/02/07 DOTA
python实现的AES双向对称加密解密与用法分析
2017/05/02 Python
对Python通过pypyodbc访问Access数据库的方法详解
2018/10/27 Python
Python中的pathlib.Path为什么不继承str详解
2019/06/23 Python
python BlockingScheduler定时任务及其他方式的实现
2019/09/19 Python
Jupyter加载文件的实现方法
2020/04/14 Python
如何利用python web框架做文件流下载的实现示例
2020/06/02 Python
Python 日期与时间转换的方法
2020/08/01 Python
前端H5 Video常见使用场景简介
2020/08/21 HTML / CSS
英国工作场所设备购买网站:Slingsby
2019/05/03 全球购物
美国珠宝精品店:Opulent Jewelers
2019/08/20 全球购物
UML设计模式笔试题
2014/06/07 面试题
医学生实习自荐信
2013/10/01 职场文书
大二自我鉴定范文
2013/10/05 职场文书
护理工作感言
2014/01/16 职场文书
主持人婚宴答谢词
2014/01/28 职场文书
校园广播稿500字
2014/02/04 职场文书
2014年元旦感言
2014/03/06 职场文书
护士演讲稿优秀范文
2014/04/30 职场文书
质量在我心中演讲稿
2014/09/02 职场文书
教师正风肃纪心得体会
2016/01/15 职场文书