遞推 B 例題2 奇怪漢諾塔

2021-10-12 10:35:31 字數 1754 閱讀 7916

漢諾塔問題,條件如下:

這裡有 a

aa、b

bb、c

cc 和 d

dd 四座塔。 這裡有 n

nn個圓盤,n

nn 的數量是恆定的。

每個圓盤的尺寸都不相同。

所有的圓盤在開始時都堆疊在塔 a

aa上,且圓盤尺寸從塔頂到塔底逐漸增大。

我們需要將所有的圓盤都從塔 a

aa 轉移到塔 d

dd 上。

每次可以移動乙個圓盤,當塔為空塔或者塔頂圓盤尺寸大於被移動圓盤時,可將圓盤移至這座塔上。

請你求出將所有圓盤從塔 a

aa 移動到塔d

dd,所需的最小移動次數是多少。

沒有輸入。

對於每乙個整數 n(1

≤n≤12

)n(1 ≤ n ≤ 12)

n(1≤n≤

12),輸出乙個滿足條件的最小移動次數,每個結果佔一行。

看題目,是漢諾塔,只是常規的三塔變成了四塔.

那麼我們就考慮四塔的做法.

首先我們定義did_

di​為三塔時n

nn個盤從a

aa塔到c

cc塔所需的步數.

那麼可以得出(證明略):

d 1=

1d_ = 1

d1​=1di=

di−1

∗2−1

(i

>1)

d_ = d_*2-1~~~~~~~~~~~~~~(i>1)

di​=di

−1​∗

2−1(

i>1)

然後我們定義f(i

)f(i)

f(i)

為四塔漢諾塔的最優步數為考慮四塔漢諾塔的演算法思想,叫frame演算法:

用四柱漢諾塔演算法把a

aa柱上部分的n−r

n- r

n−r個碟子通過c

cc柱和d

dd柱移到b

bb柱上(為f(n

−r

)f( n- r )

f(n−r)

)。

用三柱漢諾塔經典演算法把a

aa柱上剩餘的r

rr個碟子通過c

cc柱移到d

dd柱上(三塔漢諾塔r

rr盤的步數)。

用四柱漢諾塔演算法把b

bb柱上的n−r

n-rn−

r個碟子通過a

aa柱和c

cc柱移到d

dd柱上(為f(n

−r

)f(n-r)

f(n−r)

)。

依據上邊規則求出所有r(1

≤r≤n

)r(1≤r≤n)

r(1≤r≤

n)情況下步數f(n

)f(n)

f(n)

,取最小值得最終解。

f [i

]=mi

n& f[i]\\ & 2 * f[j] + d[i - j]\\ \end\right.

f[i]=m

infor(

int i =

1; i <=12;

++ i)

printf (

"%d\n"

, f[i]);

return0;

}

奇怪的漢諾塔 遞推

漢諾塔問題,條件如下 1 這裡有a b c和d四座塔。2 這裡有n個圓盤,n的數量是恆定的。3 每個圓盤的尺寸都不相同。4 所有的圓盤在開始時都堆疊在塔a上,且圓盤尺寸從塔頂到塔底逐漸增大。5 我們需要將所有的圓盤都從塔a轉移到塔d上。6 每次可以移動乙個圓盤,當塔為空塔或者塔頂圓盤尺寸大於被移動圓...

奇怪漢諾塔

奇怪漢諾塔 題目描述 漢諾塔問題,條件如下 這裡有 a b c 和 d 四座塔。這裡有 個圓盤,的數量是恆定的。每個圓盤的尺寸都不相同。所有的圓盤在開始時都堆疊在塔 a 上,且圓盤尺寸從塔頂到塔底逐漸增大。我們需要將所有的圓盤都從塔 a 轉移到塔 d 上。每次可以移動乙個圓盤,當塔為空塔或者塔頂圓盤...

奇怪的漢諾塔

漢諾塔問題,條件如下 1 這裡有a b c和d四座塔。2 這裡有n個圓盤,n的數量是恆定的。3 每個圓盤的尺寸都不相同。4 所有的圓盤在開始時都堆疊在塔a上,且圓盤尺寸從塔頂到塔底逐漸增大。5 我們需要將所有的圓盤都從塔a轉移到塔d上。6 每次可以移動乙個圓盤,當塔為空塔或者塔頂圓盤尺寸大於被移動圓...