Ybtoj 第1章 例題2 漢諾塔問題 遞推

2021-10-12 17:41:49 字數 1663 閱讀 6367

題目描述

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

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

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

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

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

每次可以移動乙個圓盤,當塔為空塔或者塔頂圓盤尺寸大於被移動圓盤時,可將圓盤移至這座塔上。 請你求出將所有圓盤從塔 a 移動到塔 d,所需的最小移動次數是多少。

輸入格式

沒有輸入。

輸出格式

對於每乙個整數n(1

<=n

<=12

n(1<=n<=12

n(1<=n

<=1

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

解題思路

首先考慮3座塔的漢諾塔問題,我們設d(n

)d(n)

d(n)

表示n個盤子3座塔的最優步數,我們需要先把n−1

n-1n−

1個盤子移到b柱上,最優步數為d(n

−1

)d(n-1)

d(n−1)

,然後把a柱上的剩餘的乙個盤子移到c柱上,步數為1,最後把b柱上的n−1

n-1n−

1個盤子移到c柱上,最優步數也為d(n

−1

)d(n-1)

d(n−1)

。固有遞推式:d(n

)=2∗

d(n−

1)+1

d(n)=2*d(n-1)+1

d(n)=2

∗d(n

−1)+

1。回到本題,設f(n

)f(n)

f(n)

表示n個盤子4座塔的最優步數,考慮從a柱移動j(0

<=j

<=n

)j(0<=j<=n)

j(0<=j

<=n

)個盤子到b柱上,最優步數為f(j

)f(j)

f(j)

。再將n−j

n-jn−

j個盤子移動到d柱上,考慮b柱上圓盤尺寸小,不能放盤子了,故變成了3塔模式,最優步數為d(n

−j

)d(n-j)

d(n−j)

,最後再將j個盤子移動到d柱上,最優步數為f(j

)f(j)

f(j)

。考慮所有的j,固有遞推式:f(n

)=mi

n(2∗

f(j)

+d(n

−j),

f(n)

f(n)=min

f(n)=m

in(2

∗f(j

)+d(

n−j)

,f(n

)**

#include

#include

using

namespace std;

const

int inf=

2147483600

;int d[20]

,f[20];

intmain()

}

YbtOJ 基礎演算法第一章例題2 奇怪漢諾塔

漢諾塔問題,條件如下 這裡有 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 上。每次可以...

第2周專案3(2) 漢諾塔

問題及 檔名稱 cpp.cbp 作 者 宋晨 完成日期 2015年9月13日 版 本 號 v1.0 問題描述 有乙個印度的古老傳說 在世界中心貝拿勒斯 在印度北部 的聖廟裡,一塊黃銅板上插著三根 寶石針。印度教的主神梵天在創造世界的時候,在其中一根針上從下到上地穿好了由大到小的64 片金片,這就是所...