迭帶加深搜尋

2021-09-30 04:11:38 字數 983 閱讀 7043

poj 2248 addition chains[

迭代加深

]by

admin

瀏覽(56)

題意:

加法鏈的

定義是第乙個元素是

1,最後乙個是

n,所有元素從小到大排列,並且除了

1之外任意乙個元素都是前面兩個元素的和(那兩個元素可相同),給定

n,求元素最少的加法鏈

.思路:

做這個題,特意學了下迭代加深搜尋,模型是:

for(deep=1; 1; deep++)

它需要重複地從上往下搜,第一次搜到的就是問題的解,解空間比

bfs小得多,

也不用像

dfs那樣需要搜所有的解。

檢視源**

列印幫助

01#include

02#define n 100

03int

num[n];

04int

ans[n];

05int

deep;

06int

cnt;

07int

find;

08int

n;09

10void

dfs(int

k)11

23else

if(k < deep && !find)

2435}36

}37}38

}39}40

41int

main()

4255

for(i=0; i

56printf("%d ", ans[i]);

57printf("%d/n", ans[i]);58}

59return

0;60

迭代加深搜尋

深度優先搜尋每次選定乙個分支,然後往下搜尋,直到遞迴邊界 才回溯。這種策略有一點缺陷,那就是當搜尋樹的分支數目特別 多,並且答案在某個較淺的節點上,如果dfs在一開始就選錯了分 支,那就會在沒有答案的深層次浪費時間 當搜尋樹規模隨著層次的深入增長很快,並且能 夠確保答案在乙個較淺的節點上時,就可以使...

迭代加深搜搜尋

對於可以用回溯法求解但解答樹的深度沒有明顯上限的題目,可以考慮使用迭代加深搜尋。經典問題 埃及分數問題 給出乙個分數,比如19 45,把它寫成若干個形如1 ri的分數的和的形式,比如19 45 1 5 1 6 1 18,要求分母不能重複使用並且使用的分數的個數最少。如果有多組個數相同的解,最後的分數...

IDDFS迭代加深搜尋

includeusing namespace std const int maxn 10 int n,a maxn bool ans sort return true int h bool dfs int d,int maxd return false int solve return max an...