寬度優先搜尋初步總結

2021-09-26 14:06:58 字數 852 閱讀 2942

使用寬搜的情況

圖的遍歷(層級遍歷、拓撲排序、連通分量——灌水法)、簡單圖的最短路徑(從乙個狀態變成另乙個狀態)

最短路徑用dp也行,最長路徑用dp dfs

二叉樹bfs步驟

1、創造乙個佇列,把起始節點放在裡面

2、while佇列不空,處理佇列中的節點,並擴充套件出新的節點(將佇列中取出點的所有鄰居都加進去,比如for所有neighbor )

3、for 上一層的節點拓展下一層的節點,且要儲存queue.size,如果不需要分層遍歷就不用這一步直接while就行(比如分層列印就需要)

圖的bfs

圖和樹的區別就是樹有上下級關係,是單向的,而圖的點之間是平級關係,是雙向的

圖的bfs就是二叉樹bfs+保證同乙個節點不會再次進入佇列——hashset

圖的bfs時間複雜度是o(點+邊)

灌水法就是找到相鄰的點後灌上水(改變原來的狀態,比如之前點是黑的,bfs遍歷到他之後就改為白的) 例題numbers of islands

獨孤九劍能夠使用bfs做的問題盡量不要使用dfs,因為遞迴可能會stackoverflow

棋盤中的bfs

棋盤轉化為圖就是把空格當作節點

遍歷時可以使用座標變換陣列(就不用正常圖中的neighbor了,陣列就代表了四個方向)+判斷是否越界,剩下的就當作正常圖處理

棋盤bfs複雜度是o(r*c)

簡單圖的最短路徑

就是分層的bfs

好的coding style盡量不使用常數,因為沒有意義

寬度優先搜尋

include using namespace std const int n 700 const int inf 0x3f3f3f3f int dir 10 int n,a,b,ans 1000000 flag 0 int floor n struct node int check node tm...

寬度優先搜尋

寬度優先搜尋演算法 又稱廣度優先搜尋 是最簡便的圖的搜尋演算法之一,這一演算法也是很多重要的圖的演算法的原型。dijkstra單源最短路徑演算法和prim最小生成樹演算法都採用了和寬度優先搜尋類似的思想。其別名又叫bfs,屬於一種盲目搜尋法,目的是系統地展開並檢查圖中的所有節點,以找尋結果。換句話說...

寬度優先搜尋

寬度優先搜尋也是搜尋的手段之一。它與深度優先搜尋類似,從某個狀態出發探索所有可以到達的狀態。const int inf 100000000 使用pair表示狀態時,使用typedef會更加方便一些 typedef pair p char maze max n max m 1 表示迷宮的字串陣列 in...