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通过函数属性实现全局变量的方法
May 16 Python
搭建Python的Django框架环境并建立和运行第一个App的教程
Jul 02 Python
Python编程实现使用线性回归预测数据
Dec 07 Python
Python运维之获取系统CPU信息的实现方法
Jun 11 Python
python3实现多线程聊天室
Dec 12 Python
Python实现批量执行同目录下的py文件方法
Jan 11 Python
python中删除某个元素的方法解析
Nov 05 Python
使用 Supervisor 监控 Python3 进程方式
Dec 05 Python
你需要学会的8个Python列表技巧
Jun 24 Python
Python如何爬取b站热门视频并导入Excel
Aug 10 Python
python openCV自制绘画板
Oct 27 Python
python如何查找列表中元素的位置
May 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
VML绘图板②脚本--VMLgraph.js、XMLtool.js
2006/10/09 PHP
Codeigniter的dom类用法实例
2015/06/26 PHP
php实现上传图片文件代码
2015/07/19 PHP
jQuery EasyUI 开源插件套装 完全替代ExtJS
2010/03/24 Javascript
js实现在字符串中提取数字
2013/11/05 Javascript
JQuery插件开发示例代码
2013/11/06 Javascript
对比分析AngularJS中的$http.post与jQuery.post的区别
2015/02/27 Javascript
Javascript数据结构与算法之列表详解
2015/03/12 Javascript
jQuery实现页面滚动时动态加载内容的方法
2015/03/20 Javascript
jQuery使用after()方法在元素后面添加多项内容的方法
2015/03/26 Javascript
jQuery无刷新分页完整实例代码
2015/10/27 Javascript
Bootstrap打造一个左侧折叠菜单的系统模板(一)
2016/05/17 Javascript
判断数组是否包含某个元素的js函数实现方法
2016/05/19 Javascript
JavaScript判断数组是否存在key的简单实例
2016/08/03 Javascript
JS实现无缝循环marquee滚动效果
2017/05/22 Javascript
React应用中使用Bootstrap的方法
2017/08/15 Javascript
Angular移动端页面input无法输入的解决方法
2017/11/14 Javascript
vue axios请求超时的正确处理方法
2018/04/02 Javascript
js正则相关知识点专题
2018/05/10 Javascript
微信小程序6位或多位验证码密码输入框功能的实现代码
2018/05/29 Javascript
vue中利用Promise封装jsonp并调取数据
2019/06/18 Javascript
vue操作dom元素的3种方法示例
2020/09/20 Javascript
[07:20]2014DOTA2西雅图国际邀请赛 选手讲解积分赛第二天
2014/07/11 DOTA
Python写的PHPMyAdmin暴力破解工具代码
2014/08/06 Python
Python实现在Linux系统下更改当前进程运行用户
2015/02/04 Python
给Python初学者的一些编程技巧
2015/04/03 Python
Python实现单词拼写检查
2015/04/25 Python
python计算时间差的方法
2015/05/20 Python
Python lxml解析HTML并用xpath获取元素的方法
2019/01/02 Python
python 将大文件切分为多个小文件的实例
2019/01/14 Python
用django-allauth实现第三方登录的示例代码
2019/06/24 Python
Python的形参和实参使用方式
2019/12/24 Python
什么是Python包的循环导入
2020/09/08 Python
HTML5自定义属性前缀data-及dataset的使用方法(html5 新特性)
2017/08/24 HTML / CSS
在线服装零售商:SheIn
2016/07/22 全球购物
全球知名的婚恋交友网站:Match.com
2017/01/05 全球购物