从顶点v开始,优先访问v的所有邻接节点,再依次访问她邻接节点的所有邻接节点。类似于图的层次遍历。
void BFS(AGraph *G,int vmint visit [maxsize])
{
ArcNode *p;//定义边结点
int que [maxsize],front = 0,rear = 0;//简单定义队列
int j;
Visit (v);//访问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; //p指向出队顶点的第一条边
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;//p指向下一条边
}
}
}