寬度優先搜尋演算法(又稱廣度優先搜尋)是最簡便的圖的搜尋演算法之一,這一演算法也是很多重要的圖的演算法的原型。dijkstra單源最短路徑演算法和prim最小生成樹演算法都採用了和寬度優先搜尋類似的思想。其別名又叫bfs,屬於一種盲目搜尋法,目的是系統地展開並檢查圖中的所有節點,以找尋結果。換句話說,它並不考慮結果的可能位置,徹底地搜尋整張圖,直到找到結果為止。
寬度優先搜尋演算法類似於乙個分層搜尋的過程,寬度優先搜尋演算法需要乙個佇列以保持訪問過頂點的順序,以便按這個順序來訪問這些頂點的鄰接頂點。
思路:依次訪問當前頂點的鄰接頂點,並按訪問順序將這些鄰接頂點儲存在佇列中,當當前頂點的所有鄰接頂點都被訪問後,從佇列中彈出乙個頂點,以該頂點為當前頂點繼續該步驟,直到所有頂點都被訪問過。
依次訪問當前頂點的所有鄰接頂點,並把這些鄰接頂點按訪問順序儲存在佇列中
當前頂點沒有未訪問的鄰接頂點,從佇列中彈出乙個頂點,以該彈出頂點繼續訪問未訪問的鄰接頂點
注意,雖然圖中的頂點都已經訪問過了,但還是要等佇列中的所有頂點彈出訪問後,演算法才結束
下面時寬度優先搜尋的過程動畫
**演示
public void bfs()
/** * 廣度優先搜尋
* @param visited
* @param row
*/public void bfs(boolean visited, int row)
//繼續尋找彈出頂點的另乙個鄰接頂點
index = getneighbor(last, index);}}
}
寬度優先搜尋
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...
寬度優先搜尋
寬度優先搜尋也是搜尋的手段之一。它與深度優先搜尋類似,從某個狀態出發探索所有可以到達的狀態。const int inf 100000000 使用pair表示狀態時,使用typedef會更加方便一些 typedef pair p char maze max n max m 1 表示迷宮的字串陣列 in...
深度優先搜尋與寬度優先搜尋
深度優先搜尋類似於樹的先序遍歷,從每個頂點開始深度優先遍歷,對該分支路徑深入遍歷到不能再深入為止,返回上層,若上一層有新的分支路徑,繼續遍歷該分支,直到所有點都被訪問 1 訪問該頂點,並標記為已訪問 2 if 該頂點的連線點未被訪問過 遞迴呼叫dfs 3 重複 2 直到該頂點的所有連線點都被訪問 t...