題庫隨記 奇怪的漢諾塔

2021-10-09 02:42:32 字數 997 閱讀 4277

漢諾塔問題,條件如下:

1、這裡有a、b、c和d四座塔。

2、這裡有n個圓盤,n的數量是恆定的。

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

4、所有的圓盤在開始時都堆疊在塔a上,且圓盤尺寸從塔頂到塔底逐漸增大。

5、我們需要將所有的圓盤都從塔a轉移到塔d上。

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

請你求出將所有圓盤從塔a移動到塔d,所需的最小移動次數是多少。

沒有輸入

輸出格式

對於每乙個整數n(1≤n≤12),輸出乙個滿足條件的最小移動次數,每個結果佔一行。

題解

核心思路即dp+遞推;

首先,我們可以初步確定,這是一道遞迴/遞推的題目。(因為是漢諾塔問題)

我們先考慮三個塔的漢諾塔問題,最優秀方案:必然是先挪走n-1個圓盤,然後再挪走圓盤n,因此可以得出遞推方程也就是 d[i]=d[i-1]*2+1;

之所以要乘以2,是因為第一次挪到第二個塔,然後還要挪移回到第三個塔,下面四個塔也是這樣的

接著考慮四塔問題,我們可以這麼思考,首先挪走j個塔,也就是有四個塔可以選擇,然後再挪走剩下的n-j個塔,此時有三個塔可以選擇,

因此對應的狀態轉移方程為:f[i] = min(f[i], f[j] * 2 + d[n - j]); //i表示當前一共有幾個塔,也就是上文所說的n

具體**如下:

#include

using

namespace std;

int d[21]

,f[21

],i,j;

intmain()

奇怪漢諾塔

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

奇怪的漢諾塔

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

奇怪的漢諾塔

本題是三盤漢諾塔的延伸。三盤漢諾塔我們是可以用遞推來求解的。設dp n 表示求解該n盤3塔問題的最少步數,顯然有dp n 2 dp n 1 1,既把前n 1個盤子從a柱移動b柱,在把第n個盤子從a柱移動 柱,最後又把前n 1個盤子從b柱移動到c柱。這是三塔的遞推式。那麼四塔的遞推式就是把前i個盤子移...