例题 奇怪的汉诺塔
题目描述
汉诺塔问题,条件如下:
1、这里有A、B、C和D四座塔。
2、这里有n个圆盘,n的数量是恒定的。
3、每个圆盘的尺寸都不相同。
4、所有的圆盘在开始时都堆叠在塔A上,且圆盘尺寸从塔顶到塔底逐渐增大。
5、我们需要将所有的圆盘都从塔A转移到塔D上。
6、每次可以移动一个圆盘,当塔为空塔或者塔顶圆盘尺寸大于被移动圆盘时,可将圆盘移至这座塔上。
请你求出将所有圆盘从塔A移动到塔D,所需的最小移动次数是多少。
输入格式
没有输入
输出格式
对于每一个整数n(1≤n≤12),输出一个满足条件的最小移动次数,每个结果占一行。
输入样例:
没有输入
输出样例:
参考输出格式
解题思路:
假设有两个盘子三个柱子,那么从A移到C需要的最少次数为3次
假设有三个盘子三个柱子,那么从A移到C需要的最少次数为7次
三个柱子下移动n个盘子的最优解,即先把n-1个盘子移到B,再把第n个盘子移到C上,最后再把n-1个盘子从B移到C上。
由此,可层层递推下去,求n-1个盘子从A移到B,先把n-2个盘子从A移到C……
得到递推次数表达式d [ i ] = 1 + d [ i - 1 ] * 2
假设有两个盘子四个柱子,那么从A移到D需要的最少次数为3次
假设有三个盘子四个柱子,那么从A移到D需要的最少次数为5次
假设有四个盘子四个柱子,那么从A移到D需要的最少次数为9次
四个柱子下移动n个盘子的最优解
先把i个盘子在四塔的模式下移动到除D柱以外的一根柱子上
把n-i个盘子在3塔模式下移动到D柱(因为不能覆盖到B柱(上一步占用的柱子