poj1958 漢諾四塔問題(三種方法)

2021-08-21 12:13:52 字數 1416 閱讀 1186

大意:漢諾塔公升級版,四根柱子,n個盤子,求最少移動次數;

思路1:遞推(或者dp?)

把四塔轉換為三塔進行思考

假設當前要移動n個盤子,那麼就不如分為以下幾步

先將上面的i個盤子移到第2或3個塔上;(四塔移動)

再把剩下的(n-i)個盤子移到最後乙個塔上(三塔移動);

最後把在那i個盤子移到最後乙個塔上(注意:是四塔移動,i個盤子一定比後來的(n-i)個盤子小)

得到方程:f[n]=min;

注:f[i]為四塔移動的最小步數,d[i]為三塔移動的最小步數(此處不再多說,都知道是2^i-1了,由於題面要求12,打表就行,由於兩次四塔移動,一次三塔移動,所以f[n]*2)

核心**:

for(int i=1;i

<=n;i++)

ac**

#include

#include

#include

#include

using namespace std;

inline int

read()

while(isdigit(chr))

return ans*f;

}//沒有讀入,依然要堅持加上/笑哭

int f[20]=;

int d=;

int main()

f[n]=0x3f3f3f3f;

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

printf("%d\n",f[n]);

}return

0;}

總體思路一模一樣,實現有區別而已;

#include

#include

#include

#include

#include

using

namespace

std;

inline

int read()

while(isdigit(chr))

return ans*f;

}int f[20];

int d=;

int hanoi(int x)

int main()

可以說是最快的思路了

#include

#include

#include

#include

using namespace std;

inline int

read()

while(isdigit(chr))

return ans*f;

}int f=;

int main()

怎麼理解漢羅塔問題 漢諾塔問題(三柱及四柱)詳解

漢諾塔 hanoi tower 又稱河內塔,傳說大梵天創造世界的時候做了三根金剛石柱子,在一根柱子上從下往上按照大小順序摞著64片 圓盤。大梵天命令婆羅門把圓盤從下面開始按大小順序重新擺放在另一根柱子上。並且規定,任何時候,在小圓盤上都不能放大圓盤,且在三根柱子之間一次只能移動乙個圓盤。問應該如何操...

專案三之經典問題 漢諾塔

漢諾塔 的典故 有乙個印度的古老傳說 在世界中心貝拿勒斯 在印度北部 的聖廟裡,一塊黃銅板上插著三根寶石針。印度教的主神梵天在創造世界的時候,在其中一根針上從下到上地穿好了由大到小的64片金片,這就是所謂的漢諾塔。不論白天黑夜,總有乙個僧侶在按照下面的法則移動這些金片 一次只移動一片,不管在哪根針上...

四根柱子處理漢諾塔問題的最少次數

經典的漢諾塔問題經常作為乙個遞迴的經典例題存在。可能有人並不知道漢諾塔問題的典故。漢諾塔 於印度傳說的乙個故事,上帝創造世界時作了三根金剛石柱子,在一根柱子上從下往上按大小順序摞著64片 圓盤。上帝命令婆羅門把圓盤從下面開始按大小順序重新擺放在另一根柱子上。並且規定,在小圓盤上不能放大圓盤,在三根柱...