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

news2024/9/23 17:17:46
  • (꒪ꇴ꒪ ),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)开发板实战

📢写在最后

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

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

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

相关文章

Pytest和Unittest测试框架的区别?

如何区分这两者,很简单unittest作为官方的测试框架,在测试方面更加基础,并且可以再次基础上进行二次开发,同时在用法上格式会更加复杂;而pytest框架作为第三方框架,方便的地方就在于使用更加灵活&#xff0…

Python Django 模型概述与应用

今天来为大家介绍 Django 框架的模型部分,模型是真实数据的简单明确的描述,它包含了储存的数据所必要的字段和行为,Django 遵循 DRY Principle 。它的目标是你只需要定义数据模型,然后其它的杂七杂八代码你都不用关心,…

龙迅LT9711 2PORT MIPI或者LVDS转TYPE-C

LT9711 1.描述: Lontium LT9711是双端口MIPI/LVDS到DP1.2转换器,内部有c型替代模式开关和PD控制器。MIPI DSI/CSI输入具有可配置的单端口或双端口,具有1个时钟通道,1个~4个数据通道,最大运行2Gbps/通道,可…

2023 年值得关注的 8 个最佳免费开发者工具

开发者工具对开发人员的重要性不言而喻,保持最新工具的更新可以显著提高你的工作效率并简化您的工作流程。随着技术的快速发展,新的开发工具不断被引入市场。今天,我们将分享 2023 年你值得关注的最新开发者工具。 1.Plaky Plaky 是一种基于…

JVM——JDK 监控和故障处理工具总结

文章目录 JDK 命令行工具jps:查看所有 Java 进程jstat: 监视虚拟机各种运行状态信息 jinfo: 实时地查看和调整虚拟机各项参数jmap:生成堆转储快照**jhat**: 分析 heapdump 文件**jstack** :生成虚拟机当前时刻的线程快照 JDK 可视化分析工具JConsole:Java 监视与管理控制台连接…

司徒理财:8.17黄金反弹遇阻,1900现价空!

黄金趋势下跌,现在反弹遇阻,继续空!除非行情强势站上1907位置,否则还是空头下跌走势,反弹遇阻直接空!      黄金从走势上看,一直阴跌,并且在昨日加速下行!现在黄金受…

ubuntu18.04从0到1在ros上跑yolo5

ubuntu篇---ubuntu20.04安装cuda和cudnn_ubuntu安装cudann_心惠天意的博客-CSDN博客操作系统环境:Ubuntu 20.041. 安装N卡驱动首先我们需要添加源,sudo add-apt-repository ppa:graphics-drivers/ppasudo apt update然后检查可以安装的驱动版本&#xff…

华为将收取蜂窝物联网专利费,或将影响LPWAN市场发展

近日,华为正式公布了其4G和5G手机、Wi-Fi6设备和物联网产品的专利许可费率,其中包含了长距离通信技术蜂窝物联网。作为蜂窝物联网技术的先驱,华为是LTE Category NB (NB-IoT)、LTE Category M和其他4G物联网标准的主要贡献者。 在NB-IoT领域…

『论文精读』Data-efficient image Transformers(DeiT)论文解读

『论文精读』Data-efficient image Transformers(DeiT)论文解读 文章目录 一. DeiT简介二. 知识蒸馏(knowledge distillation)2.1. KLDivloss2.2. 蒸馏温度 τ \tau τ2.3. distillation in transformer 三. better hyperparameter四. data augmentation五. label smoothing参…

随机微分方程

应用随机过程|第7章 随机微分方程 见知乎:https://zhuanlan.zhihu.com/p/348366892?utm_sourceqq&utm_mediumsocial&utm_oi1315073218793488384

2023年4大收银系统软件排名(真实测评)

现在满大街的各种服装店、便利店、百货店、母婴店...... 每天都要处理大量的订单。 使用传统的人工开单记账,效率低下、客户体验差、而且容易出错,需要耗费很多时间来回对账; 聪明的零售店老板都已经开始使用收银系统软件,通过手…

线程同步条件变量

为何要线程同步 在线程互斥中外面解决了多线程访问共享资源所会造成的问题。 这篇文章主要是解决当多线程互斥后引发的新的问题:线程饥饿的问题。 什么是线程饥饿?互斥导致了多线程对临界区访问只能改变为串行,这样访问临界资源的代码只能…

手把手教你Element Plus前端导出Excel表格

目录 需求背景: 项目环境: 最终效果: 具体实现: 1、下载第三方依赖包: pnpm下载命令: npm下载命令: 2、查看是否下载成功: 3、引入需要使用的页面js中 4、编写导出表格函数…

【0基础入门Python笔记】一、python 之基础语法、基础数据类型、复合数据类型及基本操作

一、python 之基础语法、基础数据类型、复合数据类型及基本操作 基础语法规则基础数据类型数字类型(Numbers)字符串类型(String)布尔类型(Boolean) 复合数据类型List(列表)Tuple&…

【傅里叶级数与傅里叶变换】数学推导——2、[Part2:T = 2 π的周期函数的傅里叶级数展开] 及 [Part3:周期为2L的函数展开]

文章内容来自DR_CAN关于傅里叶变换的视频,本篇文章提供了一些基础知识点,比如三角函数常用的导数、三角函数换算公式等。 文章全部链接: 基础知识点 Part1:三角函数系的正交性 Part2:T2π的周期函数的傅里叶级数展开 P…

顺序程序设计

#include <iostream> #include <stdio.h>int main() {float f, c;f 64.0f;c (5.0 / 9) * (f - 32);printf("f%f \n \\c%f\n", f, c);return 0; }

poste邮件服务器搭建

关于poste poste是一款开源邮件服务软件&#xff0c;可以很方便的搭建&#xff1a;SMTP IMAP POP3 反垃圾邮件 防病毒 Web 管理 Web 电子邮件&#xff0c;支持以下特性。 SPF、DKIM、DMARC、SRS 的原生实现&#xff0c;带有简单的向导用于检测木马、病毒、恶意软件的防…

【Hyper-V】Windows11 家庭版怎么启用虚拟机Hyper-V

在电脑Windows11系统上启用虚拟机Hyper-V&#xff0c;打开 启用和关闭WIndows功能&#xff0c;找到其中一项Hyper-V&#xff0c;对于家庭版的系统用户来说&#xff0c;这个选项是没有的&#xff0c;接下来讲一讲怎么开启。 安装Hyper-V 创建一个文件名为Hyper-v.bat&#xff…

人工智能原理(9)

目录 一、人工神经元模型 1、概念 2、分类 二、感知器的结构 三、反向传播网络 四、自组织映射神经网络 五、离散HOPFIELD网络 1、离散Hopfield网络结构 2、离散Hopfield网络的稳定性 3、离散Hopfield网络学习算法 六、脉冲耦合神经网络 一、人工神经元模型 1、概念…

Centos7安装Docker及配置加速器地址

一、安装docker #1.yum 包更新到最新 yum update #2.安装需要的软件包&#xff0c;yum-util 提供yum-config-manager功能&#xff0c;另外两个是devicemapper驱动依赖的 yum install -y yum-utils device-mapper-persistent-data lvm2 #3.设置yum源 yum-config-manager --add…