POJ 1958 Strange Towers of Hanoi C语言版
题目链接:http://poj.org/problem?id=1958
题目是一个变相的汉诺塔,问4个塔至少移动多少步!
先开始没看题以为就是普通汉诺塔,然后WA了半天才发现,本来汉诺塔我们可以套用公式,但4塔的我就没办法了!多塔问题,参考了维基百科
其中这样描述的:
令f(n,k)为在有k个柱子时,移动n个圆盘到另一柱子上需要的步数,则:
对于任何移动方法,必定会先将m(1<=m<=n-1)个圆盘移动到一个中间柱子上,再将第n到第n-m个圆盘通过剩下的k-1个柱子移到目标柱子上,最后将m个在中间柱子上的圆盘移动到目标柱子上。这样所需的操作步数为2f(m,k) + f(n − m,k − 1)。
进行最优化,易得:
这个递归公式适用于大于3的所有情况,但是我们只考虑4的情况,也就修改了下,具体见代码!
代码如下:
1 | /*Problem: 1958 User: awq123 |