收藏本站

汉诺塔实现的原理

汉诺塔1-4(45) 汉诺塔1-4(45) 1914 人阅读 | 0 人回复

发表于 2022-7-10 08:30:31 | 显示全部楼层 |阅读模式

汉诺塔实现的原理
1.png

2.png

3.png

4.png

5.png

1. 汉诺塔问题起源
汉诺塔来源于印度传说的一个故事,上帝创造世界时作了三根金刚石柱子,在一根柱子上从上往下从小到大顺序摞着64片黄金圆盘。
上帝命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一回只能移动一个圆盘,只能移动在最顶端的圆盘。

有预言说,这件事完成时宇宙会在一瞬间闪电式毁灭。也有人相信婆罗门至今仍在一刻不停地搬动着圆盘。
当然这个传说并不可信,如今汉诺塔更多的是作为一个玩具存在。
2.什么是汉诺塔问题?
将下图中A柱子上的圆盘依靠一定的规则(该规则在“汉诺塔问题起源”部分已说明)原封不动的移动到C柱子上
1.jpg

  • 原理讲解
下面我们以A柱子上圆盘数N=4为例讲解汉诺塔实现的原理
在初始状态下A,B,C三根柱子上圆盘如下图所示
2.png


第一步,我们将A柱最上面3个盘子当作“一个整体”借助(怎么借助呢?)C柱子移动到B柱子上,此时效果如下图所示
3.png


第二步,我们将A柱最下面一个盘子移动到
C柱子上,此时效果如下图所示
4.png


第三步,我们将B柱3个盘子作为“一个整体”借助(同理,怎么借助呢?)A柱子移动到C柱子上,此时效果如下图所示

5.png

经过上面3步操作之后,4层汉诺塔问题就减少为3层(第一步被当作一个整体的3个盘子)汉诺塔问题了。下面我们就来处理3层汉诺塔问题
第四步,我们将A柱最上面2个盘子当作“一个整体”借助C柱子移动到B柱子上,此时效果如下图所示
6.png


第五步,我们将A柱最下面一个盘子移动到
C柱子上,此时效果如下图所示
7.png


第六步,我们将B柱2个盘子作为“一个整体”借助(同理,怎么借助呢?)A柱子移动到C柱子上,此时效果如下图所示

8.png

经过上面3步操作之后,3层汉诺塔问题就减少为2层(第一步被当作一个整体的2个盘子)汉诺塔问题了。下面我们就来处理2层汉诺塔问题
2层汉诺塔的问题相比聪明的你很容易就自己搞定了。在此,我就不赘叙了。
所以,通过上面的步骤,我们很容易发现实现汉诺塔算法可以简单分为三个步骤:
把n-1个盘子由A借助C移到B;
把第n个盘子由A移到C;
把n-1个盘子由B借助A移到C;

  • 效果展示
    9.gif




回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则