//广度优先搜索一个连通图
void BFS(VNode G[], int v){
int w;
visit(v); //访问顶点v
visit[v] = 1; //将顶点v对应的访问标记置1
EnQueue(q, v); //顶点v入队列
while(!emptyQ(q)){
DeQueue(&q, &v); //出队列,元素由v返回
w = FirstAdj(G, v); //找到顶点v的第一个邻接点,如果无邻接点,返回-1
while( w != -1){
if(visited[w] == 0){
visit(w);
EnQueue(q, w); //顶点w入队列
visited[w] = 1;
}
w = NextAdj(G, v); //找到顶点v的下一个邻接点,如果无邻接点,返回-1
}
}
}
//对图G=(V,E)进行广度优先搜索的主算法
void Travel_BFS(VNode G[], int visited[], int n){
int i;
for(i=0; i<n; i++)
visited[i] = 0; //将标记数组初始化为0
for(i=0; i<n; i++)
if(visited[i] == 0) //若有顶点未被访问,从该顶点开始继续广度优先搜索
BFS(G, i);
}