迭代加深搜尋專題

2021-10-05 14:51:52 字數 842 閱讀 8628

題目思路

首先你得知道什麼是迭代加深搜尋吧!這個自行上網查閱一下

顯然普通的bfs,dfs都不行

那我們就先確定了深搜層數(就是幾個數),再在這個層數上進行搜尋

(其實其他關於迭代深搜的講的更清楚)

迭代深搜剪枝很重要

關鍵點

1.確定最少層數:每次都是前面那個數的2倍這樣擴充套件就能夠計算出最少層數

2.在寬搜的過程中,如果這個以後的數選擇都是前面乙個數*2,但最後結果也小於a,那麼就可以直接減去。

感覺有點眉目了

#include

#include

#include

#include

#include

#include

//迭代深搜

using

namespace std;

int ans[

1000

],t,flag,a;

void

sou(

int s)

else}}

intmain()

//至少擴充套件t次

ans[1]

=1;for

(t;;t++

) cout<;for

(int i=

2;i<=t;i++

)cout<<

" "<; cout<}} ```

迭代加深搜尋

深度優先搜尋每次選定乙個分支,然後往下搜尋,直到遞迴邊界 才回溯。這種策略有一點缺陷,那就是當搜尋樹的分支數目特別 多,並且答案在某個較淺的節點上,如果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...