图的遍历BFS

Posted jev-0987

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了图的遍历BFS相关的知识,希望对你有一定的参考价值。

图的遍历BFS

  1. 广度优先遍历
  2. 深度优先遍历

技术图片

技术图片

可以进行标记

树的广度优先遍历,我们用了辅助的队列

技术图片

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的主要内容,如果未能解决你的问题,请参考以下文章

(王道408考研数据结构)第六章图-第三节:图的遍历(DFS和BFS)

图的遍历方法——DFS和BFS

图的遍历BFS

15 图-图的遍历-基于邻接矩阵实现的BFS与DFS算法

图的遍历——BFS

算法导论—无向图的遍历(BFS+DFS,MATLAB)