这里额外规定了移动的方向。
我们把三柱子分别称为 $A, B, C$。设 $f(i)$ 表示把 $i$ 个盘从 $A$ 移到 $B$ 的最小移动次数,$g(i)$ 表示把 $i$ 个盘从 $A$ 移到 $C$ 的最小移动次数。注意 $g(i)\ne 2f(i-1)+1$(先把上面的盘子移到中间柱,再把底盘移到 $C$,再把其它盘子移过来),因为当有盘子在中间柱子上的时候,底盘是移动不了的。
首先对 $f(i)$ 来说没什么变化: $$ f(i) = 2g(i-1) + 1 $$
对 $g(i)$ 的移动思路如下:
$$ g(i) = g(i-1) + 1+f(i-1)+1+g(i-1) = 2g(i-1)+f(i-1)+2 $$
当然,注意到 $f(i)$ 的公式,也可以写成 $$ g(i) = f(i) + f(i-1) + 1 $$ 个人认为,从计算效率而言相差不大。前一种更适合并行,后一种 $g(i)$ 想计算的话必须等 $f(i)$ 算完。
[EOJ 1820] Hanoi Tower II
这里额外规定了移动的方向。
我们把三柱子分别称为 $A, B, C$。设 $f(i)$ 表示把 $i$ 个盘从 $A$ 移到 $B$ 的最小移动次数,$g(i)$ 表示把 $i$ 个盘从 $A$ 移到 $C$ 的最小移动次数。注意 $g(i)\ne 2f(i-1)+1$(先把上面的盘子移到中间柱,再把底盘移到 $C$,再把其它盘子移过来),因为当有盘子在中间柱子上的时候,底盘是移动不了的。
首先对 $f(i)$ 来说没什么变化:
$$
f(i) = 2g(i-1) + 1
$$
对 $g(i)$ 的移动思路如下:
$$
g(i) = g(i-1) + 1+f(i-1)+1+g(i-1) = 2g(i-1)+f(i-1)+2
$$
当然,注意到 $f(i)$ 的公式,也可以写成
$$
g(i) = f(i) + f(i-1) + 1
$$
个人认为,从计算效率而言相差不大。前一种更适合并行,后一种 $g(i)$ 想计算的话必须等 $f(i)$ 算完。