BFS
bool visited[MAX_VERTEX_NUM); //访问标记数组
void BFSTraverse(Graph G){ //对图G进行广度优先遍历,设访问函数为visit()
for(i=0;i<G.vexnum;i++)
visited[i]=FALSE; //访问标志数组初始化
InitQueue(Q); //初始化辅助队列Q
for(i=0;i<G.vexnum;i++) //从0号顶点开始遍历
if(!visited[i]) //对每个连通分量开始遍历
BFS(G,i); //v[i]未访问过,从v[i]开始BFS
}
void BFS(Graph G,int v){ //从顶点v出发,广度优先遍历图G,算法借助一个辅助队列Q
visit(v); //访问初始顶点v
visited[v]=TRUE; //对v做已访问标志
Enqueue(Q,v); //顶点v入队列
while(!isEmpty(Q)){
DeQueue(Q,v); //顶点v出队列
for(w=FirstNeighbor(G,v);w>=0;w=NextNeighbor(G,v,w)) //检测v所有邻接点
if(!visited[w]){ //w为v的尚未访问