BFS 廣度優先搜索
類似於樹的層次遍歷
#define MaxSize 100;
bool visited[MaxSize];
void BFS(Graph G,int v){
ArcNode *p; // 工作指針p
InitQueue(Q); // 初始化一個隊列
visit(v); // 訪問第一個頂點v.具體可以是Print
visited[V] = TRUE; // 對v做已訪問標記
Enqueue(Q,v); // 頂點v入隊
while(isEmpty(Q))
{ // 只要隊列不空
DeQueue(Q,v); // 頂點v出隊列
p = G->adjList[v].firstdge; // 指針p指向當前頂點的邊錶鏈表頭指針
while(p)
{
if(visited[p->adhvex]) // p所指向頂點如果未被訪問
{
visit(p->adjvex); // 訪問p所指向的頂點
EnQueue(Q.p->adjvex); // 這個頂點入隊
}
p = p->next; // p 指向該頂點的下一條邊
}
}
};
void BFSTraverse(Graph G)
{
int i; // 單獨定義是未了方便多個循環中使用
for(i=0;i<G->vexnum;i++)
{
visited[i] = false; // 將標誌數組初始化(全局數組)
}
for(i=0;i<G->vexnum;i++)
{
if(!visied[i])
{
BFS(G,i); // 爲了避免非連通圖一些頂點訪問不到,若是連通圖只會執行一次。
}
}
}