1. 程式人生 > >雙向BFS

雙向BFS

最終 圓心 假設 就會 優化方法 步驟 起點 適用於 有一種

我們知道,BFS是往廣處去搜索,我們把這想象成一個以起點為圓心的一個圓,每向前走一步,就是圓的半徑增大一個單位,而圓的每個單位面積上是一種狀態,當圓增大到目標點那麽大時,找到了答案,搜索結束。那麽顯然的,當半徑較大時,每走一步就會有十分大量的狀態需要來儲存( S=πr2 )。通常的,我們用“判重”的方法來解決,但是在這裏,還有一種優化方法:雙向搜索。

雙向搜索適用於起點和終點狀態都很明確的搜索題。試想,我從起點推算到終點,與我從終點推算到起點,最後得到的最少步驟數一定是相等的,所以我們可以從起點和終點同時搜索。同樣用圓來打比方,假設以起點為圓心畫圓時,最終半徑為r,以終點為圓心畫圓時,最終半徑為R。那麽顯然有:

πr2+πR2≤π(r+R)2

所以當害怕BFS會TLE時,不妨打一打雙向BFS。

雙向BFS