四盤漢諾塔

2021-10-09 22:47:03 字數 998 閱讀 4885

在傳統的漢諾塔遊戲中多加了乙個盤子。

問把n層的漢諾塔從第乙個盤子移到第四個盤子需要多少步?

要將n層從1號盤移動到3號盤,需要分為三步:

1:把n-1層從1號移動到2號(n層要移動到3號,為了不影響n層的移動只能移動到2號)

2:把n層從1移動到3號

3:把n-1層從2號移到3號

把第乙個步驟又能細分成類似的三步

直到當前移動的總層數為1,只需要一步,遞迴。

所以經典漢諾塔遊戲中,n層最小移動步數為

d[n] = d[n-1] + 1 + d[n-1]

d[1] = 1

經典漢諾塔有三個盤裝塔,在一次移動中,除了起始盤,只有兩個盤可以用於操作,所以

可以把經典n層諾貝塔的答案理解成:

在有兩個空位的情況下,移動一次n層塔需要的步數為d[n]。

那麼在四盤漢諾塔遊戲中,可以有三個空閒盤用於操作。

需要移動n層哈諾塔時,可以把上面的i層移動到乙個空盤中,剩下兩個空盤。

在剩下兩個空盤中移動n-i層,顯然為d[n-1]

所以四盤漢諾塔,n層的最小移動步數為

f[n] = f[i] + d[n-i] + f[i]

f[1] = 1

#include

using

namespace std;

#define ull unsigned long long

const

int maxn =15;

int d[maxn]

;int f[maxn]

;int

main()

f[1]=

1;for(

int i =

2; i <=

12; i++)}

for(

int i =

1; i <=

12; i++

)cout << f[i]

<< endl;

}

四柱漢諾塔

多柱漢諾塔的解析 題目鏈結 分析 現在有四根柱子a b c d,我們假設盤子從a移動到d,先把a的n個盤子拿出r個借助其他兩個柱子放到b上這是f n r 接著這個柱子就先不動,然後開始動a上剩下的r個盤子,現在b已經不能放這r個,我們只能通過c柱子把r個移動到d上去。這裡只用到了c柱子和目標柱子,所...

漢諾塔(四)(暴力)

時間限制 3000 ms 記憶體限制 65535 kb 難度 2 描述漢諾塔問題是乙個經典的問題,現在我們有 n 個柱子和 m 個編號 1 m 的球,我們現在要求把盡量多的球放在盡量少的柱子上,如果相鄰兩個球的和不是完全平方數的話球會相互排斥而無法接觸。注意 球必須從小到大放,每次只能放在其他球的上...

python 漢諾塔 Python漢諾塔

import turtle class stack def init self self.items def isempty self return len self.items 0 def push self,item def pop self return self.items.pop def ...