图的遍历BFS
Posted jev-0987
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了图的遍历BFS相关的知识,希望对你有一定的参考价值。
图的遍历BFS
- 广度优先遍历
- 深度优先遍历
可以进行标记
树的广度优先遍历,我们用了辅助的队列
bool visited[MAX_VERTEX_NUM] //访问标记数组
//广度优先遍历
void BFS(Graph G,int v){ //从顶点v出发,广度优先遍历图G
visit(v); //访问初始顶点v
visited[v] = TRUE; //对v做已访问标记
Enqueue(Q,v); //顶点v入队列Q
while(!isEmpty(Q)){
DeQueue(Q,v); //顶点v出队列
for(w=FirstNeighbor(G,v);w>=0;
w=NextNeighbor(G,v.w))
if(!visited[w]){ //w为v的尚未访问的邻接顶点
visit(w); //访问顶点w
visited[w]=TRUE;//对w做已访问标记
EnQueue(Q,w); //顶点w入队列
}
}
}
存在问题:如果是非连通图,则无法遍历完所有结点
解决:判断数组里还有没有false的元素
void BFSTraverse(Graph G){
for(i=0;i<G.vexnum;++i)
visited[i] = FALSE;
InitQueue(Q);
for(i=0;i<G.vexnum;++i){
if(!visited[i])
BFS(G,i);
}
}
对于无向图来说,调用bfs函数的次数=连通分量数
复杂度分析
广度优先生成树
广度优先生成森林
以上是关于图的遍历BFS的主要内容,如果未能解决你的问题,请参考以下文章