一个经典的汉诺塔问题,带着我自己的理解给做这个问题的友友们解决一下,包括我本人在做的时候也遇到的一些问题给大家阐述一下。话不多说,来看:
汉诺塔
问题描述:
汉诺塔(Hanoi Tower),又称河内塔,源于印度一个古老传说。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,任何时候,在小圆盘上都不能放大圆盘,且在三根柱子之间一次只能移动一个圆盘。
分析问题:
将a柱上的盘子,借助b柱移动到c柱上
初次接触类似的问题,乍看之下肯定会感觉无从下手,不如先分析一个容易一点的,假设a柱上只有三个盘子
如要实现转移则一共需要7步:
1.先将最上面的盘子移动到c柱上;
2.将中间的盘子移动到b柱;
3.再将c柱上的盘子移动到b柱上;
4.再将a柱上最后一个盘子移动到c柱上;
5.再将b柱上最上面盘子移动到a柱上;
6.再把b柱上的盘子移动到c柱;
7.再将a柱上的盘子移动到c柱上
只有3个盘子看似不难,实际上随着盘子数的增加,需要的步数会沿着2的n次方减1曲线增加;
如果真的要把64个圆盘从a柱子移动到c柱子上,第一步应该怎么做?虽然可以肯定,第一步唯一的选择是移动a最上面的那个圆盘,但是应该将其移到b还是c呢?很难确定。因为接下来的第二步、第三步……直到最后一步,看起来都是很难确定的。能立即确定的是最后一步:最后一步的盘子肯定也是a最上面那个圆盘,并且是由a或b移动到c——此前已经将6