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*/ |