IDA (迭代加深搜尋)

2022-07-31 03:18:13 字數 1165 閱讀 2068

首先我們先來上一下這個東西的概念

ida*演算法就是基於迭代加深的a_star演算法

此演算法的優勢,主要是改成了深度優先的方式,與a比起來,ida更實用:1.不需要判重,不需要排序;2.空間需求減少。

最典型的應用就是八數碼問題和十五數碼問題。

上面這一條我還是真的沒有看出來!

這道題還是比較基礎的,但是裡面的stl的map用的非常妙,不懂的可以自行百科,我對這篇**就不重點講解了。

**如下:

#include#define ll long long

using namespace std;

ll ch,d[10]=;

int dirx[5]=;

int diry[5]=;

queueq;

mapm;

int c[4][4];

void change(int &x,int &y,ll a)

ll rechange()

int main()

else

swap(c[x0][y0],c[nx][ny]);}}

} return 0;

}

其實最典型的ida*

(迭代加深)搜尋就要數這道題了——埃及分數

其實**還是非常好理解的,我們這裡的大概思路就是,我們先列舉搜尋樹的深度,從小到大,開始搜尋我們按照只比原分數小一點的分數(但是必須保證分子為0)開始搜,然後依次遞迴,若有更優解就更新,然後就完了。

ac**如下:

#include#define ll long long

using namespace std;

int maxd;

long long v[1005],ans[1005];

long long a,b;

long long get_first(long long a,long long b)

bool better(int d){

/* for(int i=d;i>=0;i--)

if(v[i] != ans[i])

return ans[i] == -1 || v[i] < ans[i];

return false;

*/return ans[d]==-1 || v[d]by njc

IDA 搜尋 迭代加深

首先放一道例題 給出n個數,以及目標m,需要用這n個數中的若干個數加起來等於m,問所有方案中使用的數的數量最少的方案是什麼。顯然,對於這道題,我們並不知道搜尋的深度會是多少,如果放任程式像野狗一樣滿場子亂搜,那麼肯定tle無疑了。由於需要記錄答案,所以用廣搜的話空間可能會炸。於是,我們只能用深搜,為...

POJ 2286 IDA 搜尋(迭代加深搜尋演算法)

ida 搜尋又成為迭代加深搜尋,感覺迭代加深這個稱謂就基本概括了這種搜尋算沒的核心。首先所以討論一下什麼迭代加深搜尋,深度優先搜尋乙個局面可以搜尋很多很多層,這種情況很可能時間啊複雜度很大 怎麼辦呢?聰明的人們想到了限制限制了搜尋深度,正是所謂的迭代加深搜尋,就是在深度無上限的情況下,先預估乙個深度...

迭代加深搜尋

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