python之汉诺塔问题详解
#汉诺塔问题
- 传说古老印度在一个圣庙里,一块黄铜板上插着三根宝石针。印度教的主神梵天在创造世界的时候,在其中一根针上从下到上地穿好了由大到小的64片金片圣庙,一块黄铜板上插着三根宝石针。印度教的主神梵天在创造世界的时候,在其中一根针上从下到上地穿好了由大到小的64片金片。不论白天黑夜,总有一个僧侣在按照下面的法则移动这些金片,一次只移动一片,不管在哪根针上,小片必在大片上面。当所有的金片都从梵天穿好的那根针上移到另外一概针上时,世界就将在一声霹雳中消灭,梵塔、庙宇和众生都将同归于尽。
- 游戏规则:从左到右 A B C 柱 大盘子在下, 小盘子在上, 借助B柱将所有盘子从A柱移动到C柱, 期间只有一个原则: 大盘子只能在小盘子的下面.
案例1
- 只有一个盘子时,则直接有A,移动到C 完成。
案例2
- 如果有两个盘子时,移动方案如下:
A—>B #借助B,帮助C拿到最后一个盘子
A—>C #最后一个盘子移动完成后,剩余的盘子已经全部到B上了
B—>C #将剩余的盘子移动到C上,完成
案例3
- 如果有三个盘子,盘子数量N = 3,移动方案如下:
案例4
- 如果有四个盘子,盘子数量N = 4,移动方案如下:
经过上面例子,我们可以发现如下规律:
- 当盘子只有一个是,即N=1,只有一个动作,从A移动到C即结束
- 当有N个盘子时:
- 上半部分: 移动一定和n-1盘子移动时的动作相同。出发地都是A,只不过,n-1个盘子移动的目的是B,而不是C。这样方便取出最后一个盘子
- 中间部分: 一定是由A移动到C
- 下半部分: 此时等待移动的盘子已经都在B上,而不是A上,移动步骤类似于n-1个盘子的移动。出发地是B,目的地是C
递归分析
- 经过上面例子可以得到。如果想要移动n个盘子到指定目的,那么一定要先将n-1个盘子移动到备用柱上。
- 当n-1个盘子移动后,必定要将最后一个盘子移动到C上。
- 经过上面的调换后,剩下待处理的盘子还有n-1个,此时盘子已经在B上而不是在A上。此时需要从新判断剩余的盘子个数。如果依然大于1个那么还是需要按照1的步骤移动第n-1个盘子之上的所有盘子共n-2到A上。从而好让第n-1个盘子从B移动到C。
总结:到第3步时,发现和有和第一步第二步类似地方。只需要改变盘子的出发点和目的点,就能刚好递归
对应的python实现如下:
def move(n,a,b,c):if n == 1: print(a,"--->",c)else:move(n-1,a,c,b)print(a,"--->",c)move(n-1,b,a,c)
move(4,"A","B","C")
第二种类似方法
n=4
arr11 = arr1 = [_ for _ in range(n,0,-1)]
arr22 = arr2 = []
arr33 = arr3 = []
def move(n,arr1,arr2,arr3):if n==1: # 如果只有一个 移动方法一定是由arr1到arr3arr3.append(arr1.pop()) #arr1 移动的arr3print(arr11,arr22,arr33,"====",arr1,arr2,arr3) #打印,参考。else:move(n-1,arr1,arr3,arr2) # 此时arr2为空元素,将n-1个元素移动到arr2中。arr3.append(arr1.pop()) # 将最后一个元素,移动到arr3中print(arr11,arr22,arr33,"====",arr1,arr2,arr3) #打印,参考# 此时,arr1,为空,而arr2里面有n-1个元素。重新调用递归,将剩余的元素移动到arr3中(此时剩余元素有n-1个)即,# 将arr2中的元素移动到arr3中。move(n-1,arr2,arr1,arr3)
move(n,arr1,arr2,arr3)
python之汉诺塔问题详解相关推荐
- Tower of Hanoi(汉诺塔)详解
一个经典的汉诺塔问题,带着我自己的理解给做这个问题的友友们解决一下,包括我本人在做的时候也遇到的一些问题给大家阐述一下.话不多说,来看: 汉诺塔 问题描述: 汉诺塔(Hanoi Tower),又称河内 ...
- c语言中的汉诺塔问题详解
汉诺塔问题是一个古典的数学问题,也是c语言学习中一个用递归方法解题的典型实例,我们先看一下原题. 相传在古印度圣庙中,有一种被称为汉诺塔(Hanoi)的游戏.该游戏是在一块铜板装置上,有三根杆(编号A ...
- 汉诺塔问题详解 递归实现 C语言
目录 一.前言 二.游戏规则 三.思路讲解 四.完整代码 五.最终结果展示 一.前言 汉诺塔:汉诺塔(Tower of Hanoi)源于印度传说中,大梵天创造世界时造了三根金钢石柱子, 其中一根柱子 ...
- QT汉诺塔项目详解:多线程动画
关注QT坐标,多线程动画中坐标的变化.汉诺塔都是吃要的. 我的汉诺塔新解:一种更美的描述. http://blog.csdn.net/weixin_39788534/article/details/7 ...
- 算法 汉诺塔-java详解
第一次看到这个算法时,很懵逼,是在栈那里.想了半天没想到半点跟栈有关系的解法.最后看了答案,是用的递归.但是看了答案还是很懵逼,下面就是博主自己对汉诺塔的一些了解. 有三根木桩,第一根上有n个盘子,最 ...
- 走进递归经典——汉诺塔问题详解
目录 传统艺能
- python汉诺塔递归算法流程图,python实现汉诺塔递归算法经典案例
Python汉诺塔递归问题 python请用递归算法编程解决汉诺塔问题 在线等 关于python递归函数实现汉诺塔 def move(n,a,b,c): #1 if n==1: #2 print(a, ...
- 用 python 解决汉诺塔问题并附带演示过程
用 python 解决汉诺塔问题并附带演示过程 参考文章: (1)用 python 解决汉诺塔问题并附带演示过程 (2)https://www.cnblogs.com/shinawear/p/1061 ...
- python 游戏 —— 汉诺塔(Hanoita)
python 游戏 -- 汉诺塔(Hanoita) 一.汉诺塔问题 1. 问题来源 问题源于印度的一个古老传说,大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆 ...
最新文章
- Linux命令(基础)
- postgresql查询栅格数据范围(extent)
- 手把手教学电瓶车进电梯检测、多类别车辆追踪、异常行为检测产业级应用
- B03_NumPy创建数组(numpy.empty,numpy.zeros,numpy.ones)
- (8)hibernate四种继承映射
- select 和epoll模型区别
- 从零开始学视觉Transformer(3):视觉问题中的注意力机制
- ios apple语音性别_如何使用Apple的CoreML和Vision API构建图像识别iOS应用
- 随机画五十个圆python_随拼音,随部首,随笔画,随组词,随解释,随笔顺,随词语,随康熙字典解释,随说文解字解释 - 查字典|CHAZIDIAN...
- 算法导论第三版 第1章习题答案
- 八种点云聚类方法(一)— DBSCAN
- ad6怎么画电阻_光敏电阻传感器的使用
- 交互设计[1]--设计心理学
- VueJs 自定义过滤器使用总结
- python xmind_XMind
- Excel调用有道词典实现批量翻译
- 微信公众号HTML5接入腾讯云人脸核身
- ArcGIS中拓扑规则英文对照说明
- java安装教程win7_Tomcat服务器安装配置教程(win7)
- 行列式某一行的元素与另一行对应元素的代数余子式的乘积之和等于0
热门文章
- 阿里云大学生免费云服务器领取- 测试试题
- Vue的路由配置(Vue2和Vue3的路由配置)
- adc量化单位_什么是量化单位
- 这个iOS 15小技巧让你iPhone回到身边,如果你忘记你的苹果ID密码
- WPS JS通过GET/POST请求网络数据接口写入到Excel表格
- valgrind工具
- 隐藏指定程序的托盘图标-64位Windows10适用
- js图片格式转换(File、blob、二进制)
- 我的世界服务器修复武器的指令是什么,我的世界手机版修复装备指令 | 手游网游页游攻略大全...
- c++调用oracle存储过程,C++通过occi执行select语句、存储过程、函数,取cursor值示例...