广度优先遍历,也称广度优先查找、广度优先搜索等。

基本思想

假设初始状态时图中所有顶点都未曾被访问,则广度优先遍历算法从图中某个顶点(任一顶点)出发,访问此顶点并依次访问该顶点的各个未曾访问过的邻接点。然后,分别从这些邻接点出发依次访问他们的临邻接点,并使"先被访问的顶点的邻接点"先于"后被访问的顶点的邻接点"被访问,直至图中所有已被访问的顶点的邻接点都被访问到。若此时图中尚有顶点未被访问,则另选图中一个未被访问的顶点作为起始点,重复上述过程,直至图中所有顶点都被访问到为止。
换句话说,广度优先遍历的过程是以任一顶点开始,由近及远,依次访问和该顶点路径相通且路径长度为1,2,3,…的顶点。

伪代码实现

假设图G(V, E)表示要遍历的图,广度优先遍历的伪代码实现如下:

使用邻接矩阵或邻接表表示图G(V, E)
使用visited[VertexCount]数组记录顶点是否已被访问,其中true表示已访问,false表示未访问
for i=0;i<VertexCount;i++ thenvisited[i] = false
for each vertex v in V thenif(v is not visited) thenbfs(v)
bfs(v)visited[v] = trueadd v to Queuewhile the Queue is not empty thenfor(each vertex w in v's adjacent V') thenif(w is not visited) thenvisited[v] = true add w to the Queueremove the first vertex from the Queue

广度优先遍历的效率和深度优先遍历的效率是相同的。对于使用二维数组表示的邻接矩阵时,查找每个顶点的邻接点所需的时间为O(∣V∣2)O(|V|^2)O(∣V∣2)。而当使用邻接表时,由于临邻接点可以使用链表存储,所以查找每个顶点的邻接点所需的时间为O(∣V∣+∣E∣)O(|V| + |E|)O(∣V∣+∣E∣)。

参考

《数据结构 严蔚敏 吴伟民 著
《算法设计与分析基础》 第三版 Anany Levitin 著 潘彦 译
https://blog.csdn.net/qq_40310148/article/details/106786652 图的深度优先遍历(DFS)
https://leetcode-cn.com/circle/article/YLb5l4/ 图文详解 BFS, DFS
https://blog.csdn.net/qq_41170102/article/details/105043114 leetcode高频题笔记之DFS和BFS

广度优先遍历(Breadth First Search)相关推荐

  1. 深度优先搜索(Depth First Search)、广度优先搜索(Breadth First Search)

    DFS: /* 邻接表存储的图 - DFS */void Visit( Vertex V ) {printf("正在访问顶点%d\n", V); }/* Visited[]为全局变 ...

  2. 数据结构(廿五) -- C语言版 -- 图 - 图的遍历 -- 邻接矩阵 - 深度/广度优先遍历/搜索(DFS、BFS)

    内容预览 零.读前说明 一.概 述 二.深度优先遍历(DFS) 2.1.无向图的遍历过程 2.2.有向图的遍历过程 2.3.总结说明 2.4.实现源代码 三.广度优先遍历(BFS) 3.1.广度优先的 ...

  3. 【算法】广度优先遍历 (BFS)

    目录 1.概述 2.代码实现 3.应用 1.概述 (1)广度优先遍历 (Breadth First Search),又称宽度优先遍历,是最简便的图的搜索算法之一. (2)已知图 G = (V, E) ...

  4. 数据结构(廿六) -- C语言版 -- 图 - 图的遍历 -- 邻接表 - 深度/广度优先遍历/搜索(DFS、BFS)

    内容预览 零.读前说明 一.深度优先遍历 1.1.深度优先的遍历过程 1.2.深度优先的遍历实现代码 二.广度优先遍历 2.1.广度优先的遍历过程 2.2.广度优先的遍历实现代码 三.源码测试效果 3 ...

  5. 深度优先遍历(DFS)和广度优先遍历(BFS)

    深度优先遍历(DFS)和广度优先遍历(BFS) 图的遍历:所谓遍历,即是对结点的访问.一个图有多个结点,如何遍历这些结点,有两种访问策略: 深度优先遍历(Depth First Search, 简称 ...

  6. 数据结构与算法(python):广度优先搜索(Breadth First Search,BFS)和深度优先算法(Depth First Search,DFS)

    参考自 MOOC数据结构与算法Python版 目录 一.广度优先搜索 1.1 BFS算法过程 1.2 广度优先搜索算法分析 二.深度优先搜索 2.1 骑士周游 2.1.1 问题定义 2.1.2 构建骑 ...

  7. 图——图的广度优先遍历

    1,前面两篇博文实现了邻接矩阵和邻接链表法实现图的数据结构,什么情况下选择合适的图的类型?从时间复杂度角度来对比下: 2,时间复杂度的对比分析: 1,邻接矩阵法操作性能更好.效率更高,更在意性能,则选 ...

  8. 二叉树广度遍历 c语言,二叉树深度优先遍历和广度优先遍历

    对于一颗二叉树,深度优先搜索(Depth First Search)是沿着树的深度遍历树的节点,尽可能深的搜索树的分支.以上面二叉树为例,深度优先搜索的顺序 为:ABDECFG.怎么实现这个顺序呢 ? ...

  9. 深度优先遍历(Depth First Search, 简称 DFS)

    正文开始: 深度优先遍历(Depth First Search, 简称 DFS) 与广度优先遍历(Breath First Search)是图论中两种非常重要的算法,生产上广泛用于拓扑排序,寻路(走迷 ...

  10. 图文详解两种算法:深度优先遍历(DFS)和广度优先遍历(BFS)

    图文详解两种算法:深度优先遍历(DFS)和广度优先遍历(BFS) 阅读本文前,请确保你已经掌握了递归.栈和队列的基本知识,如想掌握搜索的代码实现,请确保你能够用代码实现栈和队列的基本操作. 深度优先遍 ...

最新文章

  1. 后台返回不带http的图片路径前台怎么拼接_Shortcuts 教程:一键搞定公众号图片排版...
  2. 针对访问控制列表ACL 与 基于角色的访问控制RBAC进行简单介绍
  3. 会计期间的开关(T-code:OB52)
  4. python拼图_Python实现, 命令行下的拼图游戏
  5. 使用ajax跨域withCredentials的作用
  6. Spark MLlib回归算法------线性回归、逻辑回归、SVM和ALS
  7. java url帮助类_Spring居然还提供了这么好用的URL工具类
  8. 一键刷入twrp_小米/红米手机到手了该怎么解锁和刷 twrp
  9. android中画弧函数canvas.drawArc()之理解
  10. linux中使用ntpdate命令进行时间更新时出现the NTP socket is in use, exiting
  11. 一招定乾坤(最佳买点)系列
  12. Windows RC、CTP、RTM、OEM、RTL、VOL等版本区别
  13. c 语言程序设计形考任务一,C语言程序设计形考任务.doc
  14. 饿了么ui 省市区 三级联动框架
  15. Navicat Premium 15 的下载及其安装
  16. python计算log2×_带有Python示例的math.log2()方法
  17. 怎么把视频复制到IPAD
  18. AI集成产品中海量数据处理的嵌入式解决方案(一)
  19. 计算机语言 机器码,什么是机器码 机器码封了怎么解决-与非网
  20. 产品从0~1第一步——市场分析

热门文章

  1. 翻译:Google研究:回顾2020年并展望2021年 - Jeff Dean
  2. 有约束最优化问题的相关讨论
  3. 象棋将帅不能碰面 java_为何象棋有“将帅不能碰面”的规则?原来这有一个不为人知的典故...
  4. python老齐_python-basic
  5. 电脑太慢了最简单的办法怎么弄_最简单的电脑端微信多开方法
  6. 【知识图谱系列】动态时序知识图谱EvolveGCN
  7. springmvc使用rest风格的404错误
  8. 浅谈算法和数据结构: 三 合并排序
  9. 【生信进阶练习1000days】day3-Bioconductor annotation resources
  10. vofuria的开发(4)更换目标图片(target)