漢諾塔問題,條件如下:
1、這裡有a、b、c和d四座塔。
2、這裡有n個圓盤,n的數量是恆定的。
3、每個圓盤的尺寸都不相同。
4、所有的圓盤在開始時都堆疊在塔a上,且圓盤尺寸從塔頂到塔底逐漸增大。
5、我們需要將所有的圓盤都從塔a轉移到塔d上。
6、每次可以移動乙個圓盤,當塔為空塔或者塔頂圓盤尺寸大於被移動圓盤時,可將圓盤移至這座塔上。
請你求出將所有圓盤從塔a移動到塔d,所需的最小移動次數是多少。
輸出格式
對於每乙個整數n(1≤n≤121≤n≤12),輸出乙個滿足條件的最小移動次數,每個結果佔一行。題解:簡單遞迴問題 ,思考:三座塔時:假設一共有n個圓盤,我們可以先將n - 1 個圓盤放到b處,再將第 n 個圓盤放到c處,再將 n - 1 個圓盤放到第n個圓盤的上面,即f[ n ] = f[ n - 1 ] * 2 + 1;四座塔時,我們可以先把 i 個盤子在四塔模式下放到b柱上,再將 n - i 個盤子在三塔模式下放到c柱上,最後 i 個盤在四塔模式下放到d柱上,考慮所有的 i 可能取的最小值,得到遞迴式:
g[ i ] = min(g[i], 2 * g[ j ] + f[i - j])
**如下:
#include
#include
using namespace std;
int f[15]
, d[15]
;int
main()
}for
(int i =
1; i <
13; i++
)cout << f[i]
<
return0;
}
奇怪漢諾塔
奇怪漢諾塔 題目描述 漢諾塔問題,條件如下 這裡有 a b c 和 d 四座塔。這裡有 個圓盤,的數量是恆定的。每個圓盤的尺寸都不相同。所有的圓盤在開始時都堆疊在塔 a 上,且圓盤尺寸從塔頂到塔底逐漸增大。我們需要將所有的圓盤都從塔 a 轉移到塔 d 上。每次可以移動乙個圓盤,當塔為空塔或者塔頂圓盤...
奇怪的漢諾塔
本題是三盤漢諾塔的延伸。三盤漢諾塔我們是可以用遞推來求解的。設dp n 表示求解該n盤3塔問題的最少步數,顯然有dp n 2 dp n 1 1,既把前n 1個盤子從a柱移動b柱,在把第n個盤子從a柱移動 柱,最後又把前n 1個盤子從b柱移動到c柱。這是三塔的遞推式。那麼四塔的遞推式就是把前i個盤子移...
奇怪的漢諾塔
漢諾塔問題,條件如下 1 這裡有 a b c 和 d 四座塔。2 這裡有 n 個圓盤,n 的數量是恆定的。3 每個圓盤的尺寸都不相同。4 所有的圓盤在開始時都堆疊在塔 a 上,且圓盤尺寸從塔頂到塔底逐漸增大。5 我們需要將所有的圓盤都從塔 a 轉移到塔 d 上。6 每次可以移動乙個圓盤,當塔為空塔或...