啟發式搜尋和迭代深搜兩道模板題

2022-06-03 21:18:08 字數 1352 閱讀 9470

以前不會這兩種搜尋,而且在來長沙之前根本就不知道有這兩個東西。

現在終於打過模板題了,知道是什麼東西了,好開心。

其實啟發式搜尋和迭代深搜有乙個共同特點就是基本上都需要估價函式,啟發式搜尋比迭代深搜要難理解一些。

迭代深搜就是限制了深度的搜尋,因為深度限制了,所以很多東西處理起來更方便,除了搜尋的深度控制住了,很多時候寬度也可以減小。

一般適用於深度無限制,或需要最小深度可行解的問題。而且空間開銷小且利於剪枝。

啟發式搜尋就是乙個讓我感覺很神奇的東西了。

具體步驟是這樣的:

首先,我們定義f = g + h

對於每個點,都有自己的g、h、f。其中g表示從特定的點到起點的距離,h表示從該點到目標的估值,那麼f就是經過該點路徑的估值。

1、把起點加入到openlist中

2、重複以下步驟

a、從openlist中找出f最小的節點,並把它當做當前的操作節點

b、檢查當前點周圍的點,如果已經在openlist中看是否能通過當前點得到更小的g,如果能就更新那個點的g,f的值,如果在closelist中或者是障礙物(不可達)則忽略他們

c、把當前點從openlist中移除 ,加入closelist中

d、當目標點加入closelist中時停止

3、儲存路徑,從目標點出發,按照父節點指標遍歷,直到找到起點。

然後是兩道模板題還有**:

啟發式搜尋:八數碼問題

**:

//serene

#include#include#include#include#include#include#includeusing namespace std;

const int maxn=362880+20,inf=0x3f3f3f3f;

int t,n=9,a[12],b[12],c[12],mi[20],to=1,h[maxn],f[maxn],now;

bool usd[12];

int aa;char cc;

int read()

struct node

node(int id):id(id){}

bool operator < (const node& b) const

};priority_queueg;

int get_id(int* f)

return rs+1;

}int get_f(int* f)

return rs;

}void get_b(int x)

void dfs(ll x,ll y,ll d)

}int main()

} return 0;

}

啟發式搜尋

啟發式搜尋 heuristically search 又稱為有資訊搜尋 informed search 它是利用問題擁有的啟發資訊來引導搜尋,達到減少搜尋範圍 降低問題複雜度的目的,這種利用啟發資訊的搜尋過程稱為啟發式搜尋。例題 八數碼問題 運用優先佇列,根據目前已經確定的位置算出目前的價值,並匯入...

啟發式搜尋

啟發式搜尋 啟發式搜尋就是在狀態空間中的搜尋對每乙個搜尋的位置進行評估,得到最好的位置,再從這個位置進行搜尋直到目標。這樣可以省略大量無謂的搜尋路徑,提高了效率。在啟發式搜尋中,對位置的估價是十分重要的。採用了不同的估價可以有不同的效果。在啟發式搜尋中,我們每次找到當前 最有希望是最短路徑 的狀態進...

python程式設計搜尋 Python啟發式搜尋

啟發式搜尋在人工智慧中起著關鍵作用。在本章中,您將詳細了解它。ai中的啟發式搜尋的概念 啟發式是乙個經驗法則,它引導我們找到可能的解決方案。人工智慧中的大多數問題具有指數性質並且具有許多可能的解決方案。您不確切知道哪些解決方案是正確的,並且檢查所有解決方案將非常昂貴。因此,啟發式的使用縮小了對解決方...