深搜
inline void dfs(int x)
{
dfs();
}
廣搜
inline void bfs()
{
queue<int> q;
q.push(···)
while(!q.empty())
{
···
}
}
記憶化搜尋
其實就是記錄了每一種狀態的最優值,達到玄學剪枝效果。。。
迭代加深搜尋
定義
迭代加深搜尋也叫 \(iddfs\),是一種每次限制搜尋深度的深度優先搜尋。
解釋
迭代加深搜尋的本質還是深度優先搜尋,只不過在搜尋的同時帶上了一個深度 \(d\),當 \(d\) 達到設定的深度時就返回,一般用於找最優解。如果一次搜尋沒有找到合法的解,就讓設定的深度加一,重新從根開始。
程式碼
inline int dfs(int x)//x:深度
{
if(x>mxd)return ;//mxd:當前設定的最大深度
······
······
}
注意
- 在大多數的題目中,廣搜還是比較方便的,而且容易判重。當發現廣搜在空間上不夠優秀,而且要找最優解的問題時,就應該考慮迭代加深
- 一般在求最少步數類似的題目中可以考慮使用迭代加深