遍历步骤分析
1.设置全局变量visited数组并初始化为全0,代表所有节点均未被访问
2.设置起始点:包括对起始点进行输出、标记成已访问、入队
3.对后续结点进行操作:由起始点开始,对后续结点进行操作(输出、标记成已访问、入队)
(步骤2-3为广度优先搜索)
4.循环重复2-3的操作避免有“孤岛”结点被遗漏。
(步骤4 循环执行广度优先搜索避免遗漏“孤岛”结点,就是广度优先遍历)
要点总结
①、找到与⼀个顶点相邻的所有顶点
②、标记哪些顶点被访问过
③、需要⼀个辅助队列
代码演示
void BFStrave(graphadj*g)
{
int i;
for(i=0;i<g->numvex;i++)
{
bfs[i]=0;
}
for(i=0;i<g->numvex;i++)
{
if(bfs[i]==0)
{
BFS(g,i);
}
}
}
void BFS(graphadj*g,int i)
{
int j;
edge*p;
int Enqueue[100];
int front=0;
int rear=0;
Enqueue[front++]=i;
bfs[i]=1;
while(front!=rear)
{
j=Enqueue[rear++];
p=g->adjlist[j].firstarc;
cout<<j<<" ";
while(p!=NULL)
{
if(bfs[p->adjvex]==0)
{
Enqueue[front++]=p->adjvex;
bfs[p->adjvex]=1;
}
p=p->nextarc;
}
}
}