借助队列来实现广度优先遍历
1.任取图中一个顶点访问入队
2.队列不空时循环执行:出队,访问该顶点的邻接顶点,没有被访问过就将其入队。
3. 当队列空跳出循环
void BFS(AGraph *G,int v,int visit[maxsize]
{
ArcNode *p;
int que[maxsize],front=0,rear=0;//定义辅助队列
int j;
Visit(v);
Visit[v]=1;
rear=(rear+1)%maxsize;
que[rear]=v;
while(front!=rear)
{
front=(front+1)%maxsize;
j=que[front];
p=G->adjlist[j].firstarc;
while(p!=null)
{
if(visit[p->adjvex]==0)
{
visit(p->adjvex);
visit(p->adjvex]=1;
rear=(rear+1)%maxsize;
que[rear]=p->adjvex;
}
p=p->nextarc;
}}}