【脚踢数据结构】图(纯享版)

  • (꒪ꇴ꒪ ),Hello我是祐言QAQ
  • 我的博客主页:C/C++语言,Linux基础,ARM开发板,软件配置等领域博主🌍
  • 快上🚘,一起学习,让我们成为一个强大的攻城狮!
  • 送给自己和读者的一句鸡汤🤔:集中起来的意志可以击穿顽石!
  • 作者水平很有限,如果发现错误,可在评论区指正,感谢🙏

一、什么是图

         图是一种由节点(顶点)和连接这些节点的边构成的非线性数据结构。每个节点可以表示一个实体,而边则表示节点之间的关系。图的设计可以用于模拟现实世界中的各种复杂关系和连接,从社交网络到通信网络,都可以通过图来更好地理解和分析。

二、图的分类

        图可以根据多个维度进行分类:

  • 有向图(Directed Graph)和无向图(Undirected Graph): 有向图中的边具有方向,表示从一个节点指向另一个节点的关系;而无向图中的边没有方向,表示两个节点之间的对等关系。

  • 有权图(Weighted Graph)和无权图(Unweighted Graph): 在有权图中,每条边都有一个权重,可以表示节点之间的某种度量,如距离、成本等;而在无权图中,边没有权重,只表示连接关系。

  • 简单图和多重图(Multigraph): 简单图中不存在自环和重复的边;而多重图允许自环和可能具有相同的边。

三、图的边

        图的边是连接节点的实体,它可以包含以下信息:

  • 权重(Weight): 如果是有权图,每条边都有一个权重,代表节点之间的某种度量。
  • 方向: 在有向图中,边从一个节点指向另一个节点,有方向性;在无向图中,边没有方向,表示双向关系。
  • 标签(Label): 可以为边添加标签,表示连接的类型或特性。

        有些图的边或弧具有与它相关的数字,这种与图的边或弧相关的数叫做权,表示从一个顶点到另一个顶点的距离或花费或时间。我们称这种带权的图为网。如下图所示,即为网。

 

四、图的表达方式

        图可以使用不同的数据结构来表示:

  • 邻接矩阵(Adjacency Matrix): 使用二维数组表示图的顶点之间的连接关系。矩阵的行和列分别代表顶点,矩阵元素表示边的存在与否或权重。

                                                        图中 1 表示相连接,0 表示不相连

  • 邻接表(Adjacency List): 使用链表或数组表示图的顶点以及与其相邻的顶点。每个顶点对应一个列表,包含与之相连的顶点。

 

五、图的遍历

        图遍历是访问图中所有节点的方法,有两种主要方法:

  • 深度优先搜索(DFS): 从起始节点开始,沿着一条路径尽可能深入,直到无法继续为止,然后回溯到之前的节点,继续探索其他路径。

1.遍历思路

  • 访问顶点v;
  • 从v的未被访问的邻接点中选取一个顶点w,从w出发进行深度优先遍历;
  • 重复上述两步,直至图中所有和v有路径相通的顶点都被访问到。

2.列举

        按深度优先遍历就是:A B C D E F G H(此时这条线路已经走到尽头,可是还有一个I顶点没有遍历,所以回到G,发现G的邻接点都遍历过了,再回到F,发现F的邻接点也都遍历过了,直到D顶点,发现I这个顶点没有遍历,所以把I再遍历,继续回溯,最终回到起点A。

      

  • 广度优先搜索(BFS): 从起始节点开始,先访问所有与其直接相邻的节点,然后逐层向外扩展,确保先访问离起始节点近的节点。

1.遍历思路

  • 从图中某个顶点V0出发,并访问此顶点;
  • 从V0出发,访问V0的各个未曾访问的邻接点W1,W2,…,Wk;然后,依次从W1,W2,…,Wk出发访问各自未被访问的邻接点;
  • 重复步骤2,直到全部顶点都被访问为止。

2.列举 

六、图的算法

        图的算法是一个重要的主题,包括最短路径、连通性、最大流、最小生成树等问题。比如Dijkstra算法可以用于寻找图中的最短路径,Kruskal算法和Prim算法可以用于求解最小生成树问题。这些算法的选择和应用取决于图的特性和问题的需求。

七、适用说明

        图的应用范围广泛,包括但不限于:

  • 社交网络分析: 用于分析人际关系、社区发现、信息传播等。
  • 路线规划: 帮助找到最短路径、最优路线,应用于导航和交通规划。
  • 计算机网络: 描述计算机之间的连接、拓扑结构,用于网络设计和分析。
  • 编译器: 用于构建控制流图、数据依赖图,进行代码优化和分析。

        图还可以用于生物信息学(比如在蛋白质相互作用网中寻找功能模块)、物联网(比如在设备间建立最优的通信路径)等领域。

        总之,图是一个强大的数据结构,能够捕捉和表示各种实体之间的关系,为解决各种复杂问题提供了有效的工具。不同类型的图和图遍历算法可以根据问题的性质和需求来选择使用。

        更多C语言Linux系统ARM板实战数据结构相关文章,关注专栏:

   手撕C语言

            玩转linux

                    脚踢数据结构

                            6818(ARM)开发板实战

📢写在最后

  • 今天的分享就到这啦~
  • 觉得博主写的还不错的烦劳 一键三连喔~
  • 🎉感谢关注🎉

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

能耗监测管理系统在产业园区中的应用分析

摘要:随着电信公司企业级智能化办公系统的不断迭代优化及财务辅助系统与各个业务系统之间的壁垒不断打破、融合,能耗监测管理系统在企业生产运行管理中,为实现企业能耗数据归集,“节能减排、降本增效”提供了系统支撑及可行性保障…

Html+JavaScript实现手写签名

前言 Hello各位,本葡萄又来啦,今天遇到的场景是这样的:在日常业务流程中,经常需要某一流程环节中相关责任人员进行审批签字,早期许多公司为了省事就直接会把这位负责人的签名以键盘打字(楷体)的…

数据结构—散列表的查找

7.4散列表的查找 7.4.1散列表的基本概念 基本思想:记录的存储位置域关键字之间存在对应关系 ​ 对应关系——hash函数 ​ Loc(i) H(keyi) 如何查找: 根据散列函数 H(key) k 查找key9,则访…

easyx图形库基础4:贪吃蛇

贪吃蛇 一实现贪吃蛇:1.绘制网格:1.绘制蛇:3.控制蛇的默认移动向右:4.控制蛇的移动方向:5.生成食物6.判断蛇吃到食物并且长大。7.判断游戏结束:8.重置函数: 二整体代码: 一实现贪吃蛇…

springboot里 运用 easyexcel 导出

引入pom <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>2.2.6</version> </dependency>运用 import com.alibaba.excel.EasyExcel; import org.springframework.stereotype.Contr…

【算法篇C++实现】常见排序算法

文章目录 &#x1f680;一、选择排序&#x1f680;二、冒泡排序&#x1f680;三、插入排序&#x1f680;四、希尔排序&#x1f680;五、堆排序&#x1f680;六、归并排序&#x1f680;七、快速排序⛳总结&#xff1a; &#x1f680;一、选择排序 算法精炼每趟从待排序的记录中…

Ceph分布式存储系统优化分析

Ceph支持多种存储访问接口&#xff0c;现有的多种性能测试工具都可用于Ceph的性能测试&#xff0c;如测试块接口性能的fio&#xff0c;iometer等&#xff1b;测试CephFS接口的filebench&#xff0c;fio等;测试对象接口的cosbench等。Ceph有专用的基准测试集CBT&#xff0c;其包…

web实现酷炫的canvas粒子动画背景

文章目录 前言一、particle-bg1. git地址&#xff1a;2. 安装3. 使用4. 完整demo 二、tsParticles1. 源码地址&#xff1a;2. 安装3. 引入4. 使用5. 几个例子5.1 ts粒子五彩纸屑烟花5.2 多粒子产卵器-用tsParticles制作5.3 ts粒子鼠标吸引力5.4 粒子烟花 源码地址完结 前言 粒…

【RP2040】香瓜树莓派RP2040之自定义的短按、双击、长按按键

本文最后修改时间&#xff1a;2022年09月15日 11:02 一、本节简介 本节介绍如何编写一个可以自己选择引脚的短按、双击、长按三种方式的按键驱动。 二、实验平台 1、硬件平台 1&#xff09;树莓派pico开发板 ①树莓派pico开发板*2 ②micro usb数据线*2 2&#xff09;电脑…

【运维】linkis安装dss保姆级教程与踩坑实践

文章目录 一. 安装准备二. 创建用户三. 准备安装包四. 修改配置1. 修改config.sh2. 修改db.sh 五、安装和使用1. 执行安装脚本2. 启动服务3. 查看验证是否成功 六. 报错处理报错一&#xff1a;The user is not logged in报错二&#xff1a;dss接口报错报错三&#xff1a;执行没…

IDEA常用工具配置

IDEA常用工具&配置 如果发现插件市场用不了&#xff0c;可以设置Http Proxy&#xff0c;在该界面上点击”Check connection“并输入的地址&#xff1a;https://plugins.jetbrains.com/ 。 一、常用插件 1、MybatisX Mybaits Plus插件&#xff0c;支持java与xml互转 2、F…

TCP/IP协议组

TCP/IP通信协议是目前最完整、使用最广泛的通信协议。它的魅力在于可使不同硬件结构、不同操作系统的计算机相互通信。TCP/IP协议既可用于广域网&#xff0c;也可用于局域网&#xff0c;它是Internet/Intranet的基石。TCP/IP通信协议事实上是一组协议。 TCP/IP协议可分为5层也可…

日志系统——日志格式化模块设计

一&#xff0c;模块主要成员 该模块的主要作用是对日志消息进行格式化&#xff0c;将日志消息组织成制定格式的字符串。 该模块主要成员有两个&#xff1a;1.格式化字符串。 2.格式化子项数组 1.1 格式化字符串 格式化字符串的主要功能是保存日志输出的格式字符串。其格式化字…

机器学习赋能乳腺癌预测:如何使用贝叶斯分级进行精确诊断?

一、引言 乳腺癌是女性最常见的恶性肿瘤之一&#xff0c;也会发生在男性身上。每年全球有数百万人被诊断出乳腺癌&#xff0c;对患者的生活和健康造成了巨大的影响。早期的乳腺癌检测和准确的诊断对于提高治疗的成功率至关重要。然而&#xff0c;乳腺癌的早期诊断面临着许多挑战…

大语言模型与语义搜索;钉钉个人版启动内测,提供多项AI服务

&#x1f989; AI新闻 &#x1f680; 钉钉个人版启动内测&#xff0c;提供多项AI服务 摘要&#xff1a;钉钉个人版正式开始内测&#xff0c;面向小团队、个人用户、高校大学生等人群。该版本具有AI为核心的功能&#xff0c;包括文生文AI、文生图AI和角色化对话等。用户可通过…

整理mongodb文档:find方法查询数据

个人博客 整理mongodb文档:find方法查询数据 求关注&#xff0c;求批评&#xff0c;求指出&#xff0c;如果哪儿不清晰&#xff0c;请指出来&#xff0c;谢谢 文章概叙 如题&#xff0c;本文讲的是如何用find查询数据&#xff0c;如何在数组、字段、对象中查询&#xff0c;以…

Git 常用操作

一、Git 常用操作 1、Git 切换分支 git checkout命令可以用于三种不同的实体&#xff1a;文件&#xff0c;commit&#xff0c;以及分支。checkout的意思就是对于一种实体的不同版本之间进行切换的操作。checkout一个分支&#xff0c;会更新当前的工作空间中的文件&#xff0c;…

Web菜鸟教程 - Springboot接入认证授权模块

网络安全的重要性不言而喻&#xff0c;如今早已不是以前随便弄个http请求就能爬到数据的时代&#xff0c;而作为一个架构师&#xff0c;网络安全必须在产品开发之初就考虑好。因为在产品开发的后期&#xff0c;一方面是客户增多&#xff0c;压力变大&#xff0c;可供利用的时间…

JupyterHub实战应用

一、JupyerHub jupyter notebook 是一个非常有用的工具&#xff0c;我们可以在浏览器中任意编辑调试我们的python代码&#xff0c;并且支持markdown 语法&#xff0c;可以说是科研利器。但是这种情况适合个人使用&#xff0c;也就是jupyter notebook以我们自己的主机作为服务器…

iOS设计规范是什么?都有哪些具体规范

iOS设计规范是苹果为移动设备操作系统iOS制定的设计指南。iOS设计规范的制定保证了苹果应用在外观和操作上的一致性和可用性&#xff0c;从而提高了苹果界面设计的用户体验和应用程序的成功性。本文将从七个方面全面分析iOS设计规范。 1.iOS设计规范完整版分享 由「即时设计」…