同样本代码所呈现的广度搜索是基于图是用邻接表存储的。
其实现广度搜索是需要开一个队列来进行操作,对于C++而言,可以直接使用STL库中的队列。对于C来说,可以开一个数组来模仿队列的操作。
代码如下:
int visit[maxn];
int queue[maxn];
int rear=0;
int front=0;
int j;
void BFS(AGraph *G,int v){
ArcNode *p;
rear=(rear+1)%maxn;
queue[rear]=v;
while(rear!=front){
j=queue[front];
front=(front+1)%maxn;
p=G->adjlist[j].firstarc;
while(p!=NULL){
p=p->nextarc;
if(visit[p->adjvex==0]){
rear=(rear+1)%maxn;
queue[rear]=p->adjvex;
}
}
}
}