当前位置: 首页 > news >正文

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

🛺图的遍历:

注意:在遍历的过程中,可能会出现 回路 ( 已经访问过的节点还要重新访问一次 ) \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)(使用了堆栈或队列)
时间复杂度与存储结构(邻接矩阵或邻接表)有关,而与搜索路径无关

相关文章:

  • 不要再被骗了!电脑无法进入系统的原因可能是这个硬件坏了而已……
  • lodash.js 工具库
  • Follow Carl To Grow|【LeetCode】93.复原IP地址,78.子集,90.子集II
  • 小红书多账号管理平台哪个好用?可以快速监测多个小红书账号的数据吗?
  • Python 提取图片主色调
  • Canvas 指纹:它是什么以及如何绕过它
  • 聊聊etsy平台,一个年入百万的项目
  • 在编译 PHP 8.3.8 时遇到 configure: error: Package requirements (libxml-2.0 >= 2.9.0)
  • Linux-笔记 全志T113移植正点4.3寸RGB屏幕笔记
  • Spring之事务失效的场景
  • 【推荐】Prometheus+Grafana企业级监控预警实战
  • uniapp微信小程序使用xr加载模型
  • 代谢组数据分析十一:典型相关分析
  • golang使用RSA加密和解密
  • Nosql期末复习
  • [数据结构]链表的实现在PHP中
  • 《网管员必读——网络组建》(第2版)电子课件下载
  • 「前端早读君006」移动开发必备:那些玩转H5的小技巧
  • 【css3】浏览器内核及其兼容性
  • bootstrap创建登录注册页面
  • ECS应用管理最佳实践
  • es的写入过程
  • Javascript 原型链
  • JavaScript异步流程控制的前世今生
  • Java读取Properties文件的六种方法
  • java小心机(3)| 浅析finalize()
  • java中的hashCode
  • js面向对象
  • Just for fun——迅速写完快速排序
  • Linux各目录及每个目录的详细介绍
  • linux学习笔记
  • Quartz实现数据同步 | 从0开始构建SpringCloud微服务(3)
  • Redis在Web项目中的应用与实践
  • Spark学习笔记之相关记录
  • Spring Boot MyBatis配置多种数据库
  • Vue 动态创建 component
  • 浏览器缓存机制分析
  • 免费小说阅读小程序
  • 设计模式走一遍---观察者模式
  • 视频flv转mp4最快的几种方法(就是不用格式工厂)
  • 微服务核心架构梳理
  • 想晋级高级工程师只知道表面是不够的!Git内部原理介绍
  • 学习ES6 变量的解构赋值
  • 硬币翻转问题,区间操作
  • 用Visual Studio开发以太坊智能合约
  • 再谈express与koa的对比
  • Nginx惊现漏洞 百万网站面临“拖库”风险
  • 如何用纯 CSS 创作一个货车 loader
  • 智能情侣枕Pillow Talk,倾听彼此的心跳
  • ​​​​​​​GitLab 之 GitLab-Runner 安装,配置与问题汇总
  • #每天一道面试题# 什么是MySQL的回表查询
  • (6)STL算法之转换
  • (Matlab)基于蝙蝠算法实现电力系统经济调度
  • (PyTorch)TCN和RNN/LSTM/GRU结合实现时间序列预测
  • (附源码)spring boot火车票售卖系统 毕业设计 211004