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读写ini配置文件方法实例分析
Jun 30 Python
python生成式的send()方法(详解)
May 08 Python
python3之微信文章爬虫实例讲解
Jul 12 Python
浅谈python 线程池threadpool之实现
Nov 17 Python
python+pandas分析nginx日志的实例
Apr 28 Python
pandas DataFrame实现几列数据合并成为新的一列方法
Jun 08 Python
Python利用 utf-8-sig 编码格式解决写入 csv 文件乱码问题
Feb 21 Python
python ImageDraw类实现几何图形的绘制与文字的绘制
Feb 26 Python
SpringBoot实现登录注册常见问题解决方案
Mar 04 Python
django 解决扩展自带User表遇到的问题
May 14 Python
Python读写锁实现实现代码解析
Nov 28 Python
20行代码教你用python给证件照换底色的方法示例
Feb 05 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产生随机字符串函数
2006/12/06 PHP
php SQL防注入代码集合
2008/04/25 PHP
Zend Framework自定义Helper类相关注意事项总结
2016/03/14 PHP
原生JS实现Ajax通过POST方式与PHP进行交互的方法示例
2018/05/12 PHP
深入解析PHP底层机制及相关原理
2020/12/11 PHP
控制打印时页眉角的代码
2007/02/08 Javascript
JS焦点图切换,上下翻转
2011/05/12 Javascript
JavaScript动态插入script的基本思路及实现函数
2013/11/11 Javascript
使用jquery实现以post打开新窗口
2014/03/19 Javascript
浅析jQuery移动开发中内联按钮和分组按钮的编写
2015/12/04 Javascript
jQuery插件支持同一页面被多次调用
2016/02/14 Javascript
jquery+Jscex打造游戏力度条
2020/09/12 Javascript
利用node.js搭建简单web服务器的方法教程
2017/02/20 Javascript
使用Math.max,Math.min获取数组中的最值实例
2017/04/25 Javascript
Jquery获取radio选中的值
2017/05/05 jQuery
浅谈angular4生命周期钩子
2017/09/05 Javascript
关于 angularJS的一些用法
2017/11/29 Javascript
javaScript中的空值和假值
2017/12/18 Javascript
VSCode配置react开发环境的步骤
2017/12/27 Javascript
JS声明对象时属性名加引号与不加引号的问题及解决方法
2018/02/16 Javascript
对mac下nodejs 更新到最新版本的最新方法(推荐)
2018/05/17 NodeJs
小程序实现五星点评效果
2018/11/03 Javascript
详解基于node.js的脚手架工具开发经历
2019/01/28 Javascript
17道题让你彻底理解JS中的类型转换
2019/08/08 Javascript
简单说明Python中的装饰器的用法
2015/04/24 Python
Python使用numpy模块实现矩阵和列表的连接操作方法
2019/06/26 Python
pytorch方法测试——激活函数(ReLU)详解
2020/01/15 Python
python发qq消息轰炸虐狗好友思路详解(完整代码)
2020/02/15 Python
世界上最大的罕见唱片、CD和音乐纪念品网上商店:991.com
2018/05/03 全球购物
终端业务员岗位职责
2013/11/27 职场文书
开朗女孩的自我评价
2014/02/10 职场文书
情人节活动策划方案
2014/02/27 职场文书
学雷锋宣传标语
2014/06/25 职场文书
六一文艺汇演主持词
2015/06/30 职场文书
读书笔记怎么写
2015/07/01 职场文书
Python实现老照片修复之上色小技巧
2021/10/16 Python