圖的遍歷BFS
阿新 • • 發佈:2020-06-30
圖的遍歷BFS
- 廣度優先遍歷
- 深度優先遍歷
可以進行標記
樹的廣度優先遍歷,我們用了輔助的佇列
bool visited[MAX_VERTEX_NUM] //訪問標記陣列 //廣度優先遍歷 void BFS(Graph G,int v){ //從頂點v出發,廣度優先遍歷圖G visit(v); //訪問初始頂點v visited[v] = TRUE; //對v做已訪問標記 Enqueue(Q,v); //頂點v入佇列Q while(!isEmpty(Q)){ DeQueue(Q,v); //頂點v出佇列 for(w=FirstNeighbor(G,v);w>=0; w=NextNeighbor(G,v.w)) if(!visited[w]){ //w為v的尚未訪問的鄰接頂點 visit(w); //訪問頂點w visited[w]=TRUE;//對w做已訪問標記 EnQueue(Q,w); //頂點w入佇列 } } }
存在問題:如果是非連通圖,則無法遍歷完所有結點
解決:判斷數組裡還有沒有false的元素
void BFSTraverse(Graph G){
for(i=0;i<G.vexnum;++i)
visited[i] = FALSE;
InitQueue(Q);
for(i=0;i<G.vexnum;++i){
if(!visited[i])
BFS(G,i);
}
}
對於無向圖來說,呼叫bfs函式的次數=連通分量數