/********************广度优先遍历算法*******************/
void BFSTraverse(Graph G, Status (*Visit)(int v))
{ // 按广度优先非递归遍历图G。使用辅助队列Q和访问标志数组visited。
for (v=0; v<G.vexnum; ++v) visited[v] = FALSE;
InitQueue(Q); // 置空的辅助队列Q
for ( v=0; v<G.vexnum; ++v )
if (!visited[v])
{ EnQueue(Q, v); //入队
visited[u] = TRUE; Visit(u); //访问
while (!QueueEmpty(Q))
{ DeQueue(Q, u); //出队
for ( w=FirstAdjVex(G, u); w!=0; w=NextAdjVex(G, u, w) )
if ( ! visited[w])
{ visited[u] = TRUE; Visit(u); //访问
EnQueue(Q, w); //入队
}
} //while
} //if
} // BFSTraverse
// FirstAdjVex(G, u)寻找u的第一个邻接点,并返回其下标位置
// NextAdjVex(G, u, w) w是u的一个邻接点,寻找u的所有邻接点中位于w后面的那一个,并返回其下标位置