void BFSTraverse ( Graph G, Status ( *Visit ) ( int v ) )
{/*按广度优先非递归遍历图G。使用辅助队列Q 和访问标志数组visited*/
for ( v=0; v<G,vexnum; ++v )
visited[v]=FALSE
InitQueue ( Q ); /*置空的国债队列Q*/
if ( !visited[v] ) /*v 尚未访问*/
{
EnQucue ( Q,v ); /*v 入队列*/
while ( !QueueEmpty ( Q ) )
{
DeQueue ( Q,u ); /*队头元素出队并置为u*/
visited[u]=TRUE;
visit ( u ); /*访问u*/
for ( w=FistAdjVex ( G,u ); w; w=NextAdjVex ( G,u,w ) )
if ( !visited[w] ) EnQueue ( Q,w ); /*u 的尚未访问的邻接顶点w 入队列Q*/
}
}
}/*BFSTraverse*/