奇怪的漢諾塔 遞推

2021-09-11 14:24:38 字數 837 閱讀 2552

漢諾塔問題,條件如下:

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

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

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

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

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

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

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

沒有輸入

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

首先考慮3個塔的漢諾塔問題,最優秀方案:假設有三個圓盤a,b,c,先從a挪走n-1個圓盤到b,然後再從a挪走圓盤n到c,

然後把b上的n-1個圓盤移到c,因此可以得出遞推方程也就是 a[i]=a[i-1]*2+1;

然後考慮4塔問題,首先挪走j個塔,也就是有4個塔可以選擇,然後再挪走剩下的n-j個塔,此時有三個塔可以選擇,因此這就是我們的狀態轉移方程:b[i]=min(b[i],b[j]*2+a[i-j]);

#include#include#include#includeusing namespace std;

const int maxn=1e5+5;

int a[15],b[15];

int main()

memset(b,0x3f,sizeof(b));

b[0]=0;

for(int i=1;i<=12;i++)

}for(int i=1;i<=12;i++)

return 0;

}

奇怪漢諾塔

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

遞推 B 例題2 奇怪漢諾塔

漢諾塔問題,條件如下 這裡有 a aa b bb c cc 和 d dd 四座塔。這裡有 n nn個圓盤,n nn 的數量是恆定的。每個圓盤的尺寸都不相同。所有的圓盤在開始時都堆疊在塔 a aa上,且圓盤尺寸從塔頂到塔底逐漸增大。我們需要將所有的圓盤都從塔 a aa 轉移到塔 d dd 上。每次可以...

奇怪的漢諾塔

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