栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

广度优先遍历(BFS)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

广度优先遍历(BFS)

广度优先遍历(Breadth-First-Search,BFS)要点:

1.找到与一个顶点相邻的所有顶点·

2.标记哪些顶点被访问过

3.需要一个辅助队列

  • FirstNeighbor(G,x):求图G中顶点x的第一个邻接点,若有则返回顶点号。若x没有邻接点或图中不存在x,则返回-1。
  • NextNeighbor(G,x,y):假设图G中顶点y是顶点x的一个邻接点,返回除y之外顶点x的下一个邻接点的顶点号,若y是x的最后一个邻接点,则返回-1。

遍历序列的可变性

①使用邻接矩阵表示的图的广度优先遍历序列唯一

②使用邻接表表示的图的广度优先遍历序列不唯一

对于无向图,调用BFS函数的次数=连通分量数

bool visited[Max_VERTEX_NUM];           //访问标记数组
void BFSTraverse(Graph G){              //对图G进行广度优先遍历
    for(int i=0;i=0;w=NextNeighbor(G,v,w)){
            //检测v所有邻接点
            if(!visited[w]){            //w为v的尚未访问的邻接点
                visit(w);               //访问顶点w
                visited[w] = true;      //对w做已访问标记
                EnQueue(Q,w);           //顶点w入队列
            }
        }
    }
}

空间复杂度:最坏情况,辅助队列大小为O(|V|)

 

邻接矩阵存储的图:

访问|V|个顶点需要O(|V|)的时间

查找每个顶点的邻接点都需要O(|V|)的时间,而总共有|V|个顶点

时间复杂度=O(|V|2)

 

邻接表存储的图:

访问|V|个顶点需要O(|V|)的时间

查找各个顶点的邻接点共需要O(|E|)的时间,

时间复杂度=O(|V|+|E|)

 

广度优先生成树:

由广度优先遍历确定的树;

邻接表存储的图的表示方式不唯一,遍历序列、生成树也不唯一;

遍历非连通图可得广度优先生成森林

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/947925.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号