6.3图的遍历

news2024/11/24 17:23:43

图的遍历是指从某点出发,按照某种搜索方式沿着边访问图中所有节点

图的遍历算法主要有两种:广度优先,深度优先

都需要辅助数组visited[]来记录节点是否被访问过

6.3.1广度优先搜索

like层次遍历,需要辅助队列

代码实现


#include<stdio.h>
#define maxnum 15
bool visited[maxnum];//定义辅助数组
void BFSTraverse(Graph G) {
	for (int i = 0; i < G.vexnum; i++)
	{
		visited[i] = false;
	}//初始化数组
	initQueue(Q);//初始化队列
	for (int i = 0; i < G.vexnum; i++)//从0号顶点开始遍历
	{
		if (!visited[i]) {
			BFS(G,i);//广度优先遍历
		}
	}
}
void BFS(Graph G,int i){
	visit(i);//访问
	visited[i] = true;//改为t
	EnQueue(Q,i);//入队
	while (!isEmpty(Q)) {//判断队列是否为空
		DeQueue(Q,i);//输出队列第一个元素
		for ( p = FirstNeghbor(G,i); p >0; p=NextNeighbor(G,i,w))
		{
			if (!visited[p]) {
				visit(p);
				visited[p] = true;
				EnQueue(Q, p);
			}
		}

	}

}

 广度优先遍历过程

从顶点1出发:12563748

从顶点3出发:34678215

性能分析

邻接表和邻接矩阵空间复杂度

邻接表时间复杂度

邻接矩阵的时间复杂度

广度优先生成树

在广度遍历中可以得到一颗遍历树,为广度优先生成树

邻接矩阵唯一,生成树唯一

邻接表不唯一,生成树不唯一

6.3.2深度优先搜索

belike树的先序遍历

代码实现

#include<stdio.h>
#define maxnum 15
bool visited[maxnum];//定义辅助数组
void DFSTraverse(Graph G) {
	for (int i = 0; i < G.vexnum; i++)
	{
		visited[i] = false;
	}//初始化数组
	for (int i = 0; i < G.vexnum; i++)//从0号顶点开始遍历
	{
		if (!visited[i]) {
			DFS(G, i);//深度优先遍历
		}
	}
}
void DFS(Graph G, int i) {
	visit(i);//访问
	visited[i] = true;//改为t
		for (p = FirstNeghbor(G, i); p > 0; p = NextNeighbor(G, i, w))
		{
			if (!visited[p]) {
				DFS(G, p);
			}
}

深度优先遍历过程

从2出发:21563478

从3出发:34762158

性能分析

深度优先生成树和生成森林

非连通图可通过深度优先产生n棵生产树

6.3.3图的遍历与图的连通性

to无向图:调用DFS/BFS的次数=连通分量数

to有向图:强连通分量只调用一次DFS/BFS;

若从起始节点到其他节点都有路径,则只需调用一次

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2114833.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

解决Win10版Township进度保存问题

解决Win10版Township进度保存问题 问题描述问题分析解决步骤1.WinR打开运行&#xff0c;输入regedit点击确定打开注册表2.进入注册表“计算机\HKEY_CURRENT_USER\Software\Classes\LocalSettings\Software\Microsoft\Windows\CurrentVersion\AppContainer\Mappings”目录3.在这…

算法题之水壶问题

水壶问题 有两个水壶&#xff0c;容量分别为 x 和 y 升。水的供应是无限的。确定是否有可能使用这两个壶准确得到 target 升。 你可以&#xff1a; 装满任意一个水壶清空任意一个水壶将水从一个水壶倒入另一个水壶&#xff0c;直到接水壶已满&#xff0c;或倒水壶已空。 示…

LabVIEW制系统开发流程介绍

在开发一个LabVIEW电机控制系统时&#xff0c;尤其是涉及多种类型的电机并需实现本地与远程控制时&#xff0c;合理的开发顺序是确保项目高效完成且返工最少的关键。下面介绍如何按照系统需求分阶段开发&#xff0c;从而保障开发的速度与质量&#xff0c;减少返工的风险。 开发…

企业大模型落地的“最后一公里”攻略

一、大模型落地的行业现状与前景 大模型在多个行业展现出强大的应用潜力。在金融行业&#xff0c;沉淀了大量高质量数据&#xff0c;各金融平台用户数以亿计&#xff0c;交易数据浩如烟海。利用大模型分析处理这些数据&#xff0c;金融机构可以预测用户行为偏好&#xff0c;更…

CMake/C++:一个日志库spdlog

项目仓库 GitHub - gabime/spdlog: Fast C logging library.Fast C logging library. Contribute to gabime/spdlog development by creating an account on GitHub.https://github.com/gabime/spdlog 知乎参考贴 https://zhuanlan.zhihu.com/p/674073158 先将仓库clone一下 然…

LabVIEW如何确保采集卡稳定运行

在LabVIEW开发中&#xff0c;如何确保硬件采集卡稳定运行&#xff0c;特别是长期采集电压信号&#xff0c;是系统稳定性的重要考虑因素。用户在使用采集卡时&#xff0c;可能需要频繁进行开始、停止和重新采集的操作&#xff0c;这对硬件和软件提出了高要求。下面介绍实现长期稳…

大数据开发职场:理性分析拖延

你有没有遇到过这样的情况&#xff1a;周四晚上&#xff0c;室友兴高采烈地邀请你去看最新上映的大片&#xff0c;而你正在奋战一份截止日期为下周一的化学作业。这个看似简单的选择&#xff0c;实际上隐藏着一个深刻的人生哲学问题。 目录 5秒钟抓住你的注意力深入探讨&#x…

YOLOv8/v10+DeepSORT多目标车辆跟踪(车辆检测/跟踪/车辆计数/测速/禁停区域/绘制进出线/绘制禁停区域/车道车辆统计)

01&#xff1a;YOLOv8 DeepSort 车辆跟踪 该项目利用YOLOv8作为目标检测模型&#xff0c;DeepSort用于多目标跟踪。YOLOv8负责从视频帧中检测出车辆的位置&#xff0c;而DeepSort则负责关联这些检测结果&#xff0c;从而实现车辆的持续跟踪。这种组合使得系统能够在视频流中准…

连接池的设计与实现-0基础Go语言版

为什么需要连接池&#xff1f; 假设现在没有连接池&#xff0c;每次建立一个新的连接&#xff0c;都需要消耗一定的时间开销&#xff08;必要时会使用TCP三次握手&#xff09;。因此&#xff0c;连接的创建和销毁是一件非常昂贵的操作。尤其是在高并发场景下&#xff0c;可能会…

一场 Kafka CRC 异常引发的血案

一、问题概述 客户的生产环境突然在近期间歇式的收到了Kafka CRC的相关异常&#xff0c;异常内容如下 Record batch for partition skywalking-traces-0 at offset 292107075 is invalid, cause: Record is corrupt (stored crc 1016021496, compute crc 1981017560) 报错…

时间同步服务

多主机协作工作时&#xff0c;各个主机的时间同步很重要&#xff0c;时间不一致会造成很多重要应用的故障&#xff0c;如&#xff1a;加密协 议&#xff0c;日志&#xff0c;集群等。 利用NTP&#xff08;Network Time Protocol&#xff09; 协议使网络中的各个计算机时间达到…

网络安全运维培训一般多少钱

在当今数字化时代&#xff0c;网络安全已成为企业和个人关注的焦点。而网络安全运维作为保障网络安全的重要环节&#xff0c;其专业人才的需求也日益增长。许多人都对网络安全运维培训感兴趣&#xff0c;那么&#xff0c;网络安全运维培训一般多少钱呢? 一、影响网络安全运维培…

RISC-V (十一)软件定时器

主要的思想&#xff1a;硬件定时器是由硬件的定时器设备触发的。软件定时器在硬件定时器的基础上由软件控制实现多个定时器的效果。主要的思路是在trap_handler函数中加入软件代码&#xff0c;使其在设定的时间点 去执行想要执行的功能函数。 定时器的分类 硬件定时器&#xf…

Linux 复制目录和文件

概述 cp 命令主要可用于复制文件或目录。 cp 是单词 copy 的缩写。 语法 cp 命令的语法如下: cp [选项] source dest。即复制 source 文件到 dest。 该命令支持的选项有: 选项说明-r递归复制整个文件夹-i若目标文件已经存在,则会询问是否覆盖-p保留源文件或目录的所有属性…

安卓玩机工具-----ADB方式的刷机玩机工具“秋之盒”’ 测试各项功能预览

秋之盒 安卓玩机工具-秋之盒是一款ADB刷机工具箱&#xff0c;基于谷歌ADB的一款绿色安装&#xff0c;具备了海量扩展模块,支持ADB刷机救砖、一键激活黑域、adb指令修复等功能&#xff0c;是一款开源、免费、易用的手机刷机工具&#xff01; 并且是一款开源、免费、易用的图形化…

OneHotEncoder一个不太合理的地方

OneHotEncoder&#xff0c;在Xtrain上fit&#xff0c;在Xtest上transform 如果遇到某个值出现在Xtest&#xff0c;而没有在Xtrain出现过时&#xff0c;会抛出如下错误&#xff1a; OneHotEncoder Found unknown categories [xxx] in column xx during transform OneHotEncoder …

简单实用的php全新实物商城系统

免费开源电商系统,提供灵活的扩展特性、高度自动化与智能化、创新的管理模式和强大的自定义模块,让电商用户零成本拥有安全、高效、专业的移动商城。 代码是全新实物商城系统源码版。 代码下载

Prometheus 服务监控

官网&#xff1a;https://prometheus.io Prometheus 是什么 Prometheus 是一个开源的系统监控和报警工具&#xff0c;专注于记录和存储时间序列数据&#xff08;time-series data&#xff09;。它最初由 SoundCloud 开发&#xff0c;并已成为 CNCF&#xff08;云原生计算基金会…

基于EPS32C3电脑远程开机模块设计

基于EPS32C3电脑远程开机模块设计 前言 缘起&#xff0c;手头资料太多了&#xff0c;所以想组一台NAS放在家里存储数据。在咸鱼淘了一套J3160主板加机箱&#xff0c;加上几块硬盘组建NAS。 对于NAS&#xff0c;我的需求是不用的时候关机(节省功耗)&#xff0c;要用的时候开机…

每日OJ_牛客_骆驼命名法(递归深搜)

目录 牛客_骆驼命名法&#xff08;简单模拟&#xff09; 解析代码 牛客_骆驼命名法&#xff08;简单模拟&#xff09; 骆驼命名法__牛客网 解析代码 首先一个字符一个字符的读取内容&#xff1a; 遇到 _ 就直接跳过。如果上一个字符是 _ 则下一个字符转大写字母。 #inclu…