当前课程知识点:数据结构(上) > 第六章 图 > (c)广度优先搜索 > 06C-6 多连通
由算法的原理以及过程,不难看出
与起始顶点s相连通的每一个顶点
都迟早会被bfs搜索、发现并访问
也就是说s顶点所属的那个连通域
确实可以被悉数的遍历
然而问题是并非每幅图
都只包含一个连通域
那么在含有多个连通域的时候
从任何一个起点s出发
未必能够抵达其它的连通域
那么这种情况如何处理呢?
如何使得bfs搜索足以覆盖整幅图
而不是其中的某一个特定的连通域呢?
我们不妨采用这样一种方法
可以看到这里只不过是对
刚才所介绍的bfs算法
做了一个while循环的封装
具体来说 逐一地检查
图中的每一个顶点v
一旦发现新的这个顶点v
仍然处于最初的undiscovered状态
就会随即地启动一次
源自顶点v的广度优先搜索
为以示区别
封装之后的这个算法以小写的bfs来表示
这样无论原图中包含多少个连通域
我们总是能够在其中找到一个起始顶点
并且启动对对应这个连通域的遍历
这样我们也就顺利地实现了
对多个连通域的统一遍历
当然尽管这个封装之后的算法
在功能上是毋庸置疑的
但是难免我们会对它的效率产生质疑
我们的质疑是有理由的
因为这里毕竟引入了一层新的循环
而且至少从表面看来
这个循环的迭代次数将多达线性次
然而我们说这种担心是不必的
因为这里并非对每一个顶点
都启动一轮bfs搜索
而是只有在当前的顶点
能够经过这个if判断之后
才启动这样一次搜索
这种处理方式可以保证
对于每一个连通域只有一个顶点
可能作为起点引起它所属的那个连通域
被完全的遍历掉
每一个连通域启动
而且只启动一次广度优先搜索
因此所有花费在搜索上的时间
累计也不过对全图的一次遍历
而不是多次
-选课之前
--写在选课之前
--宣传片
-考核方式
--考核方式
-OJ系统说明
--关于OJ
--1-注册与登录
--2-界面与选课
--3-提交测试
-关于课程教材与讲义
--课程教材与讲义
-关于讨论区
--关于讨论区
-微信平台
--html
-PA晋级申请
--PA晋级
-(a)计算
--演示
--(a)计算--作业
-(b)计算模型
-(b)计算模型--作业
-(c)大O记号
-(c)大O记号--作业
-(d)算法分析
-(d)算法分析--作业
-(e)迭代与递归
-(e)迭代与递归--作业
-(xc)动态规划
-- 演示
-(xc)动态规划--作业
-本章测验--作业
-(a)接口与实现
--02A-5 复制
-(a)接口与实现--作业
-(b)可扩充向量
-(b)可扩充向量--作业
-(c)无序向量
--02C-1 概述
--02C-3 插入
--02C-6 查找
--02C-8 遍历
-(c)无序向量--作业
-(d1)有序向量:唯一化
-(d1)有序向量:唯一化--作业
-(d2)有序向量:二分查找
-(d2)有序向量:二分查找--作业
-(d3)有序向量:Fibonacci查找
-(d3)有序向量:Fibonacci查找--作业
-(d4)有序向量:二分查找(改进)
-(d4)有序向量:二分查找(改进)--作业
-(d5)有序向量:插值查找
-第二章 向量(下)--(d5)有序向量:插值查找
-(e)起泡排序
--02E-2 改进
--02E-3 反例
-(e)起泡排序--作业
-(f)归并排序
-(f)归并排序--作业
-本章测验--作业
-(a)接口与实现
--03A-4 实现
-(a)接口与实现--作业
-(b)无序列表
--03B-2 查找
-(b)无序列表--作业
-(c)有序列表
--03C-3 查找
-(c)有序列表--作业
-(d)选择排序
--03D-1 构思
--03D-2 实例
--03D-3 实现
--03D-4 推敲
--03D-6 性能
-(d)选择排序--作业
-(e)插入排序
--03E-1 经验
--03E-2 构思
--03E-3 对比
--03E-4 实例
--03E-5 实现
-(e)插入排序--作业
-(xd)习题辅导:LightHouse
-本章测验--作业
- (a)栈接口与实现
--04A-1 栈
--04A-2 实例
--04A-3 实现
- (a)栈接口与实现--作业
-(c1)栈应用:进制转换
-第四章 栈与队列--(c1)栈应用:进制转换
-(c2)栈应用:括号匹配
-(c2)栈应用:括号匹配--作业
-(c3)栈应用:栈混洗
-第四章 栈与队列--(c3)栈应用:栈混洗
-(c4)栈应用:中缀表达式求值
-(c4)栈应用:中缀表达式求值--作业
-(c5)栈应用:逆波兰表达式
-第四章 栈与队列--(c5)栈应用:逆波兰表达式
-(d)队列接口与实现
--04D-1 接口
--04D-2 实例
--04D-3 实现
-第四章 栈与队列--本章测验
-(a)树
--05A-1 动机
--05A-2 应用
-(a)树--作业
-(b)树的表示
--05B-2 父亲
--05B-3 孩子
-第五章 二叉树--(b)树的表示
-(c)二叉树
-(c)二叉树--作业
-(d)二叉树实现
-(d)二叉树实现--作业
-(e1)先序遍历
-(e1)先序遍历--作业
-(e2)中序遍历
-第五章 二叉树--(e2)中序遍历
-(e4)层次遍历
-第五章 二叉树--(e4)层次遍历
-(e5)重构
-(e5)重构--作业
-本章测验--作业
-(a)概述
-(a)概述--作业
-(b1)邻接矩阵
-(b1)邻接矩阵--作业
-(c)广度优先搜索
--06C-2 策略
--06C-3 实现
--06C-5 实例
-(c)广度优先搜索--作业
-(d)深度优先搜索
--06D-1 算法
--06D-2 框架
--06D-3 细节
-(d)深度优先搜索--作业
-第六章 图--本章测验