#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<limits.h>
#include"ALGraph.h"
#include"sqqueue.h"
void BFSTraverse(ALGraph G); //按广度优先非递归遍历图G
int visited[MAX_VERTEX_NUM]; // 访问标志数组(全局量)
int main()
{
ALGraph g;
CreateGraphF (g); // 利用数据文件创建图
Display(g); // 输出图
printf("广度优先遍历序列:\n");
BFSTraverse(g);
return 0;
}
void BFSTraverse(ALGraph G)
{ //按广度优先非递归遍历图G。使用辅助队列Q和访问标志数组visited。
/********** Begin **********/
int v,u,w;
ArcNode *p;
SqQueue Q;
for(v=0;v<G.vexnum;v++)
visited[v]=0;
InitQueue(Q);
for(v=0;v<G.vexnum;v++)
if(!visited[v]){
visited[v]=1;
visit(G.vertices[v].data);
EnQueue(Q,v);
while(!QueueEmpty(Q)){
DeQueue(Q,u);
p=G.vertices[u].firstarc;
while(p){
w=p->data.adjvex;
if(!visited[w]){
visited[w]=1;
visit(G.vertices[w].data);
EnQueue(Q,w);
}
p=p->nextarc;
}
}
}
printf("\n");
/********** End **********/
}