码迷,mamicode.com
首页 > 其他好文 > 详细

图的遍历BFS

时间:2020-06-30 14:51:53      阅读:64      评论:0      收藏:0      [点我收藏+]

标签:visit   无法   生成   png   src   ted   初始   标记   graph   

图的遍历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

标签:visit   无法   生成   png   src   ted   初始   标记   graph   

原文地址:https://www.cnblogs.com/jev-0987/p/13213415.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!