C语言的数据结构:图的操作

news2024/11/18 23:28:33

🛺图的遍历:

注意:在遍历的过程中,可能会出现 回路 ( 已经访问过的节点还要重新访问一次 ) \color{orange}回路(已经访问过的节点还要重新访问一次) 回路(已经访问过的节点还要重新访问一次).

当从A开始访问时,先访问A,然后C,这时候由于C和D没有连接,无法直接到达D,需要再回到A,此时A就被多次访问了。

可以创建一个数组用于保存访问过的顶点。

🏍️深度优先搜索(Depth_First Search ——DFS)

如下面的图,
访问 A 顶点 \color{orange}访问A顶点 访问A顶点,发现A顶点有两个边,随便选择一个,B顶点
访问 B 顶点 \color{orange}访问B顶点 访问B顶点,发现有两条边,一个与A连接,一个与C连接,而与A连接的已经访问过了,则访问C顶点。
访问 C 顶点 \color{orange}访问C顶点 访问C顶点,之后没有边了
退回 B 顶点 \color{orange}退回B顶点 退回B顶点,连接的现条边都访问过了。
$\color{orange}退回A顶点,发现与D连接的边没有访问。
访问 D 顶点 \color{orange}访问D顶点 访问D顶点,搜索结束

🛵算法效率分析

🚲连通图

邻接矩阵 \color{#5ecffd}邻接矩阵 邻接矩阵 —— 遍历图中每个顶点都要从头扫描该顶点所在行,时间复杂度为 O ( n 2 ) O(n^2) O(n2)
邻接表 \color{#5ecffd}邻接表 邻接表 —— 虽然有2e个表结点,但只需要扫描e个结点即可完成遍历,加上访问n个头结点的时间,时间复杂度为 O ( n + e ) O(n+e) O(n+e)

注:
稠密图 \color{orange}稠密图 稠密图适合在邻接矩阵上进行深度遍历。
稀疏图 \color{orange}稀疏图 稀疏图适合在邻接表上进行深度遍历。

🏍️广度优先搜索(Breadth_First Search ——BFS)

如图:
访问 A 顶点 \color{orange}访问A顶点 访问A顶点,发现A顶点有两个边
访问 B 、 D 顶点 \color{orange}访问B、D顶点 访问BD顶点,发现B顶点与D顶点都有两条边没有访问。
访问 C 、 E , G 、 H 顶点 \color{orange}访问C、E,G、H顶点 访问CEGH顶点,右边已经没有顶点要访问了,而左边还有一个
访问 F 顶点 \color{orange}访问F顶点 访问F顶点,搜索结束。

🛵算法效率分析

🚲连通图

邻接矩阵 \color{#5ecffd}邻接矩阵 邻接矩阵 —— 遍历图中每个顶点都要从头扫描该顶点所在行,时间复杂度为 O ( n 2 ) O(n^2) O(n2)
邻接表 \color{#5ecffd}邻接表 邻接表 —— 虽然有2e个表结点,但只需要扫描e个结点即可完成遍历,加上访问n个头结点的时间,时间复杂度为 O ( n + e ) O(n+e) O(n+e)

DFS算法与BFS算法效率比较

空间复杂度相同,都是 O ( n ) O(n) O(n)(使用了堆栈或队列)
时间复杂度与存储结构(邻接矩阵或邻接表)有关,而与搜索路径无关

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

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

相关文章

「实战应用」如何用DHTMLX将上下文菜单集成到JavaScript甘特图中(二)

DHTMLX Gantt是用于跨浏览器和跨平台应用程序的功能齐全的Gantt图表。可满足项目管理应用程序的所有需求,是最完善的甘特图图表库。 DHTMLX Gantt是一个高度可定制的工具,可以与项目管理应用程序所需的其他功能相补充。在本文中您将学习如何使用自定义上…

秒懂设计模式--学习笔记(4)【创建篇-工厂方法模式】

目录 3、工厂方法模式3.1 介绍3.2 工厂的多元化与专业化3.3 游戏角色建模(建模)3.4 简单工厂不简单(实例化、初始化)3.5 制定工业制造标准3.6劳动分工 3、工厂方法模式 3.1 介绍 程序设计中的工厂类往往是对对象构造、实例化、初始化过程的封装,而工厂方法&#x…

【AIGC评测体系】大模型评测指标集

大模型评测指标集 (☆)SuperCLUE(1)SuperCLUE-V(中文原生多模态理解测评基准)(2)SuperCLUE-Auto(汽车大模型测评基准)(3)AIGVBench-T2…

昇思25天学习打卡营第6天|关于函数与神经网络梯度相关技术探讨

目录 Python 库及 MindSpore 相关模块和类的导入 函数与计算图 微分函数与梯度计算 Stop Gradient Auxiliary data 神经网络梯度计算 Python 库及 MindSpore 相关模块和类的导入 Python 中的 numpy 库被成功导入,并简称为 np。numpy 在科学计算领域应用广泛&#x…

借教室(题解)

P1083 [NOIP2012 提高组] 借教室 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 思路&#xff1a;二分前缀和 我们将和质检员那题差不多&#xff0c;只需要将候选人二分即可 #include<bits/stdc.h> using namespace std; #define int long long int n,m; int r[100000…

精准检测,守护安全:可燃气体报警器检测范围探讨

随着工业化进程的加快&#xff0c;易燃易爆气体的使用日益普遍&#xff0c;其安全隐患也愈发凸显。可燃气体报警器作为一种重要的安全监测设备&#xff0c;能够在气体泄漏时及时发出警报&#xff0c;预防火灾和爆炸事故的发生。 在这篇文章中&#xff0c;佰德将对可燃气体报警…

Docker搭建MySQL双主复制详细教程

在此之前需要提前安装好Docker和 Docker Compose 。 一、创建目录 首先创建一个本地数据挂载目录。 mkdir -p master1-data master2-data二、编写docker-compose.yml version: 3.7services:mysql-master1:image: mysql:5.7.36container_name: mysql-master1environment:MYSQL_…

自动驾驶---Motion Planning之多段五次多项式

1 前言 在之前的博客系列文章中和读者朋友们聊过Apollo的 Motion Planning方案: 《自动驾驶---Motion Planning之LaneChange》 《自动驾驶---Motion Planning之Path Boundary》 《自动驾驶---Motion Planning之Speed Boundary》 《自动驾驶---Motion Planning之轨迹Path优化》…

Python中解决os.listdir命令读取文件乱序问题方法

Python中使用对话框批量打开文件时出现乱序问题的解决方法 一、问题描述二、os.listdir读取文件乱序问题解决方法 欢迎学习交流&#xff01; 邮箱&#xff1a; z…1…6.com 网站&#xff1a; https://zephyrhours.github.io/ 一、问题描述 有时候为了方便&#xff0c;我们在进…

Hadoop-08-HDFS集群 基础知识 命令行上机实操 hadoop fs 分布式文件系统 读写原理 读流程与写流程 基本语法上传下载拷贝移动文件

章节内容 上一节完成&#xff1a; HDFS的简介内容HDFS基础原理HDFS读文件流程HDFS写文件流程 背景介绍 这里是三台公网云服务器&#xff0c;每台 2C4G&#xff0c;搭建一个Hadoop的学习环境&#xff0c;供我学习。 之前已经在 VM 虚拟机上搭建过一次&#xff0c;但是没留下…

从零开始学量化~Ptrade使用教程——安装与登录

PTrade交易系统是一款高净值和机构投资者专业投资软件&#xff0c;为用户提供普通交易、篮子交易、日内回转交易、算法交易、量化投研/回测/实盘等各种交易工具&#xff0c;满足用户的各种交易需求和交易场景&#xff0c;帮助用户提高交易效率。 运行环境及安装 操作系统&…

OFDM技术概述8——FBMC

Filter bank multicarrier(FBMC&#xff0c;滤波器组多载波)&#xff0c;是一种类似于OFDM的调制方式&#xff0c;用滤波器抑制子载波的旁瓣大小&#xff0c;使用FFT/IFFT或多相滤波器实现&#xff0c;其应用于5G的主要优势&#xff1a; 子载波信号带限&#xff0c;带外泄漏小…

5.(vue3.x+vite)水平垂直居中实现方式

前端技术社区总目录(订阅之前请先查看该博客) 示例效果 介绍 (1)父级元素设置position:relative; 子级元素设置:position:absolute;left:50%;top:50%;transform: translate(-50%,-50%); 兼容性较好 (1)父级元素设置弹性盒子:display:flex;justify-content:center; a…

LabVIEW幅频特性测试系统

使用LabVIEW软件开发的幅频特性测试系统。该系统整合了Agilent 83732B信号源与Agilent 8563EC频谱仪&#xff0c;通过LabVIEW编程实现自动控制和数据处理&#xff0c;提供了成本效益高、操作简便的解决方案&#xff0c;有效替代了昂贵的专用仪器&#xff0c;提高了测试效率和设…

library source does not match the bytecode for class SpringApplication

library source does not match the bytecode for class SpringApplication 问题描述&#xff1a;springboot源码点进去然后download source后提示标题内容。spring版本5.2.8.RELEASE&#xff0c;springboot版本2.7.18 解决方法&#xff1a;把spring版本改为与boot版本对应的6.…

如何快速去除视频里面的水印字幕等信息?(内附工具)

环境&#xff1a; VSR 需要独显 GPU:N 4070TI 12G 问题描述&#xff1a; 如何快速去除视频里面的水印字幕等信息&#xff1f; 解决方案&#xff1a; 1.打开AI工具VSR&#xff0c;打了要处理的视频 2.右侧滑块调整绿色选框&#xff0c;选中要去的字幕或者水印 这次测试右…

维克日记 v0.4.2:开发者友好的数字化笔记工具

维克日记&#xff0c;专为技术开发者和笔记爱好者设计的数字化笔记工具&#xff0c;以其强大的功能和灵活的配置赢得了用户的好评。软件采用Markdown语法&#xff0c;提供实时预览功能&#xff0c;让您的笔记编辑更加高效和直观。维克日记的用户界面简洁而功能齐全&#xff0c;…

k8s 中间件

1. zookeeper 是的&#xff0c;Zookeeper 和 Kafka 经常一起使用&#xff0c;Zookeeper 在 Kafka 中扮演了关键角色。以下是 Zookeeper 和 Kafka 在实际项目中的结合使用及其作用的详细说明。 项目背景 假设我们有一个分布式数据处理系统&#xff0c;该系统需要高吞吐量的实…

Webpack: 剖析插件基本形态与架构逻辑

概述 Webpack 对外提供了 Loader 与 Plugin 两种扩展方式&#xff0c;其中 Loader 职责比较单一&#xff0c;开发方法比较简单容易理解&#xff1b;Plugin 则功能强大&#xff0c;借助 Webpack 数量庞大的 Hook&#xff0c;我们几乎能改写 Webpack 所有特性&#xff0c;但也伴…

改变图像中特定区域的颜色

背景与原理 再训练施工即系模型中&#xff0c;发现大量施工机械都是黄色的&#xff0c;我需要把它们换成蓝色的&#xff0c;以增强模型使用可靠性。 目前没有尝试深度学习算法&#xff0c;只是简单的进行了处理。 核心目的&#xff1a;通过人工标注与opencv的结合&#xff0…