搜尋全家桶(未完待續)

tyccyt發表於2024-09-01

深搜

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:當前設定的最大深度
    ······
    ······
}

注意

  • 在大多數的題目中,廣搜還是比較方便的,而且容易判重。當發現廣搜在空間上不夠優秀,而且要找最優解的問題時,就應該考慮迭代加深
  • 一般在求最少步數類似的題目中可以考慮使用迭代加深

相關文章