06-6.3.2 图的广度优先遍历

👋 Hi, I’m @Beast Cheng
👀 I’m interested in photography, hiking, landscape…
🌱 I’m currently learning python, javascript, kotlin…
📫 How to reach me --> 458290771@qq.com


喜欢《数据结构》部分笔记的小伙伴可以订阅专栏,今后还会不断更新。🧑‍💻
感兴趣的小伙伴可以点一下订阅、收藏、关注!🚀
谢谢大家!🙏

与树的广度优先遍历之间的联系

树的广度优先遍历[[5.4.3 树和森林的遍历]]
图的广度优先遍历和树类似
但是对于图来说:搜索相邻的结点时,有可能搜到已经访问过的结点
解决方法:对已经访问过的结点打上标记就行了

算法实现

广度优先遍历(BFS)要点:

  • 找到与一个顶点相邻的所有顶点
  • 标记哪些顶点被访问过
  • 需要一个辅助队列
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)){
			// 检测v所有邻接点
			if(!visited[w]){  // w是v的尚未访问的邻接顶点
				visit(w);  // 访问顶点w
				visited[w] = TRUE;  // 对w做已访问标记
				EnQueue(Q, w);  // 顶点w入队列
			}
		}
	}
}

算法存在的问题

如果是非连通图,无法遍历完所有的结点
解决方法:增加一段代码

void BFSTraverse(Graph G){  // 对图G进行广度优先遍历
	for(i=0; i<G.vexnum; ++i)
		visited[i] = FALSE;  // 访问标记数组初始化
	InitQueue(Q);  // 初始化辅助队列Q
	for(i=0; i<G.vexnum; ++i)  // 从0号顶点开始遍历
		if(!visited[i])  // 对每个连通分量调用一次BFS
			BFS(G, i);  // vi从未访问过,从vi开始进行BFS
}

复杂度分析

邻接矩阵存储的图:
访问 ∣ V ∣ |V| V 个顶点都需要 O ( ∣ V ∣ ) O(|V|) O(V) 的时间
查找每个顶点的邻接点都需要 O ( ∣ V ∣ ) O(|V|) O(V) 的时间,而总共有 ∣ V ∣ |V| V 个顶点
时间复杂度 = O ( ∣ V ∣ 2 ) =O(|V|^2) =O(V2)


邻接表存储的图:
访问 ∣ V ∣ |V| V 个顶点都需要 O ( ∣ V ∣ ) O(|V|) O(V) 的时间
查找各个顶点的邻接点共需要 O ( ∣ E ∣ ) O(|E|) O(E) 的时间
时间复杂度 = O ( ∣ V ∣ + ∣ E ∣ ) =O(|V|+|E|) =O(V+E)


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

广度优先生成树

广度优先生成树由广度优先遍历过程确定
由于邻接表的表示方式不唯一,因此基于邻接表的广度优先生成树也不唯一

广度优先生成森林

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

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
CDH-6.3.2是由Cloudera提供的一个开源的Hadoop生态系统版本。CDH包含了许多Apache项目,如Hadoop、HBase、Hive、Impala等,并且集成了Cloudera自家开发的一些工具和服务。 要下载CDH-6.3.2,首先需要访问Cloudera官网(www.cloudera.com)。在官网上,可以找到下载页面,其中包含了各个版本的CDH。 在下载页面上,可以找到CDH-6.3.2的下载链接。点击相关链接后,会跳转到下载页面。在下载页面上,可以选择各个组件的二进制文件、文档以及示例代码等。 选择相应的组件二进制文件后,会开始下载CDH-6.3.2的安装包。下载的速度取决于网络连接的速度和服务器的负载情况。 一旦下载完成,就可以在本地进行安装。在安装之前,需要确保系统满足CDH的运行要求,如硬件配置和操作系统版本等。 CDH-6.3.2的安装过程是相对复杂和耗时的,需要仔细按照官方提供的文档进行操作。安装过程涉及到配置各个组件的参数、设置集群的配置文件以及启动服务等等。 一旦安装完成,就可以开始使用CDH-6.3.2了。CDH提供了一个Web界面,可以通过浏览器访问进行集群管理和监控。同时,也可以使用相应的命令行工具来操作和管理集群。 总结来说,要下载CDH-6.3.2,首先需要访问Cloudera官网的下载页面,选择相应的组件二进制文件进行下载。然后,按照官方文档的指引进行安装、配置和启动。最后,通过Web界面或命令行工具来管理和操作集群。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Beast Cheng

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值