汉诺塔问题,条件如下:
1、这里有 A、B、C 三座塔。
2、这里有 n 个圆盘,n 的数量是恒定的。
3、每个圆盘的尺寸都不相同。
4、所有的圆盘在开始时都堆叠在塔 A 上,且圆盘尺寸从塔顶到塔底逐渐增大。
5、我们需要将所有的圆盘都从塔 A 转移到塔 C上。
6、每次可以移动一个圆盘,当塔为空塔或者塔顶圆盘尺寸大于被移动圆盘时,可将圆盘移至这座塔上。
求出把A的盘子移到C上的步骤数。
思路:
1.将n - 1个盘子从a移到c中(以b为介质)
2.将a中最后一个盘子,也就是最大的一个盘子移到c上。
我们来推一下递推公式:移动n个盘子,在第一步移动了n - 1个盘子一次,移动了第n个盘子一次。在步骤二移动了n - 1个盘子一次。
所以递推公式为:d[i] = 2 * d[i - 1] + 1; d[i]表示移动i个盘子要操作的次数。
3.再将b中n - 1个盘子移到c
思考:如果把柱子换成4根,那最少需要多少步呢。
我们首先将a柱上的j根盘子放到d盘上,然后不管d盘了,之后把a,b,c看成3柱汉诺塔问题来处理。
分析一下递推公式:
首先将j个盘子放到d,要d[j]次,再将n - j个盘子放到c盘上,要d[n - j]次,之后再将d盘中的j个盘子移动到c盘上,要d[j]次。
那么j是多少呢?我们一一枚举就行了,找出最小值。