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

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

  • (꒪ꇴ꒪ ),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)开发板实战

📢写在最后

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

相关文章:

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

(꒪ꇴ꒪ ),Hello我是祐言QAQ我的博客主页:C/C语言,Linux基础,ARM开发板,软件配置等领域博主🌍快上🚘,一起学习,让我们成为一个强大的攻城狮!送给自己和读者的…...

[leetcode] 707 设计链表

707. 设L计链表 中等 902 相关企业 你可以选择使用单链表或者双链表,设计并实现自己的链表。 单链表中的节点应该具备两个属性:val 和 next 。val 是当前节点的值,next 是指向下一个节点的指针/引用。 如果是双向链表,则还需…...

JIRA:项目管理的秘密武器

引言 在当今动态且快速变化的商业环境中,项目管理已经成为任何组织成功的关键因素。能够有效地管理项目,保证项目在设定的时间和预算内按照预期的质量完成,是每个项目经理的目标。为了实现这个目标,项目经理需要依赖强大的工具&a…...

ARM 作业1

一、思维导图 二、 1. 2. .text 文本段 .globl _start 声明_start:mov r0,#0mov r1,#0fun:cmp r1,#100bhi stopadd r0,r0,r1add r1,r1,#1b fun stop:b stop .end...

【解析postman工具的使用---基础篇】

postman前端请求详解 主界面1.常见类型的接口请求1.1 查询参数的接口请求1.1.1 什么是查询参数?1.1.2 postman如何请求 1.2 ❤表单类型的接口请求1.2.1 复习下http请求1.2.2❤ 什么是表单 1.3 上传文件的表单请求1.4❤ json类型的接口请求 2. 响应接口数据分析2.1 postman的响…...

Elasticsearch:如何在 Ubuntu 上安装多个节点的 Elasticsearch 集群 - 8.x

Elasticsearch 是一个强大且可扩展的搜索和分析引擎,可用于索引和搜索大量数据。 Elasticsearch 通常用于集群环境中,以提高性能、提供高可用性并实现数据冗余。 在本文中,我们将讨论如何在 Ubuntu 20.04 上安装和配置具有多节点集群的 Elast…...

记录win 7旗舰版 “VMware Alias Manager and Ticket Service‘(VGAuhService)启动失败。

记录win 7旗舰版 "VMware Alias Manager and Ticket Service’(VGAuhService)启动失败。 描述如图 https://learn.microsoft.com/zh-CN/cpp/windows/latest-supported-vc-redist?viewmsvc-140#visual-studio-2015-2017-2019-and-2022 安装对应版本的VC 库就可以解决问…...

git 开发环境配置

系统:Mac OS 1、下载git,官网已经推荐使用命令下载。 /bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh) 2、验证git是否安装成功 git --version 3、配置本地git全局变量 git config --global user.n…...

Tableau画图

目录 蝴蝶图 四象图 排序图 盒型图/散点图 圆环图 火柴图 直方图 瀑布图 地理图 面积图 树地图 面积图 条形图 词云图 双轴图 填充地图 tableau2023.2 须知 蝴蝶图 拉好数据之后 创建新字段正负销售额,并拖入第一个颜色标记卡 四象图 智能推荐 散…...

nginx上web服务的基本安全优化、服务性能优化、访问日志优化、目录资源优化和防盗链配置简介

一.基本安全优化 1.隐藏nginx软件版本信息 2.更改源码来隐藏软件名和版本 (1)修改第一个文件(核心头文件),在nginx安装目录下找到这个文件并修改 (2)第二个文件 (3)…...

himall3.0商城源码

目录 1 himall3.0商城源码 1.1 /// 获取待评价订单数量 1.2 /// 保存支付订单信息,生成支付订单 1.3 /// 取最近time分钟内的满足打印的订单数据 himall3.0商城源码 /// <summary>...

【LeetCode75】第二十九题 删除链表的中间节点

目录 题目&#xff1a; 示例; 分析: 代码: 题目&#xff1a; 示例; 分析: 给我们一个链表&#xff0c;让我们把链表中间的节点删了。 那么最直观最基础的办法是遍历两边链表&#xff0c;第一遍拿到链表长度&#xff0c;第二次把链表中间节点删了。 这个暴力做法我没事过…...

Floyd(多源汇最短路)

Floyd求最短路 给定一个 n 个点 m 条边的有向图&#xff0c;图中可能存在重边和自环&#xff0c;边权可能为负数。 再给定 k 个询问&#xff0c;每个询问包含两个整数 x 和 y&#xff0c;表示查询从点 x 到点 y 的最短距离&#xff0c;如果路径不存在&#xff0c;则输出 impo…...

Pycharm找不到Conda可执行文件路径(Pycharm无法导入Anaconda已有环境)

在使用Pycharm时发现无法导入Anaconda创建好的环境&#xff0c;会出现找不到Conda可执行文件路径的问题。 解决 在输入框内输入D:\anaconda3\Scripts\conda.exe&#xff0c;点击加载环境。 注意前面目录是自己Anaconda的安装位置&#xff0c;之后就可以找到Anaconda的现有环…...

国产之光:讯飞星火最新大模型V2.0

大家好&#xff0c;我是herosunly。985院校硕士毕业&#xff0c;现担任算法研究员一职&#xff0c;热衷于机器学习算法研究与应用。曾获得阿里云天池比赛第一名&#xff0c;CCF比赛第二名&#xff0c;科大讯飞比赛第三名。拥有多项发明专利。对机器学习和深度学习拥有自己独到的…...

通讯录实现【C语言】

目录 前言 一、整体逻辑分析 二、实现步骤 1、创建菜单和多次操作问题 2、创建通讯录 3、初始化通讯录 4、添加联系人 5、显示联系人 6、删除指定联系人 ​7、查找指定联系人 8、修改联系人信息 9、排序联系人信息 三、全部源码 前言 我们上期已经详细的介绍了自定…...

pcl欧式聚类

欧式聚类实现方法大致是&#xff1a; 1、找到空间中某点 p 1 p_1 p1​&#xff0c;用KD-Tree找到离他最近的n个点&#xff0c;判断这n个点到 p 1 p_1 p1​的距离。将距离小于阈值r的点 p 2 、 p 3 、 p 4 p_2、p_3、p_4 p2​、p3​、p4​…放在类Q里 2、在 Q ( p 1 ) Q(p_1…...

macOS Ventura 13.5.1(22G90)发布(附黑/白苹果系统镜像地址)

系统镜像下载&#xff1a;百度&#xff1a;黑果魏叔 系统介绍 黑果魏叔 8 月 18 日消息&#xff0c;苹果今日向 Mac 电脑用户推送了 macOS 13.5.1 更新&#xff08;内部版本号&#xff1a;22G90&#xff09;&#xff0c;本次更新距离上次发布隔了 24 天。 本次更新重点修复了…...

分布式监控平台——Zabbix

市场上常用的监控软件&#xff1a; 传统运维&#xff1a;zabbix、 Nagios 一、zabbix概述 作为一个运维&#xff0c;需要会使用监控系统查看服务器状态以及网站流量指标&#xff0c;利用监控系统的数据去了解上线发布的结果&#xff0c;和网站的健康状态。 利用一个优秀的监…...

【OpenGauss源码学习 —— 列存储(创建表)】

列存储 什么是列存储&#xff1f;语法实现语法格式参数说明示例源码分析&#xff08;创建表&#xff09;语法层&#xff08;Gram.y&#xff09;子模块&#xff08;utility.cpp&#xff09; 总结 声明&#xff1a;本文的部分内容参考了他人的文章。在编写过程中&#xff0c;我们…...

BG3ModManager:博德之门3模组管理终极解决方案

BG3ModManager&#xff1a;博德之门3模组管理终极解决方案 【免费下载链接】BG3ModManager A mod manager for Baldurs Gate 3. This is the only official source! 项目地址: https://gitcode.com/gh_mirrors/bg/BG3ModManager 你是否曾经为《博德之门3》的模组管理而烦…...

基于Readability算法的网页内容提取服务:从原理到工程实践

1. 项目概述&#xff1a;一个为现代阅读而生的开源工具 最近在折腾个人知识库和稍后读系统时&#xff0c;我一直在找一个能完美解决“网页内容净化与结构化”痛点的工具。市面上的方案要么太重&#xff0c;要么太简陋&#xff0c;直到我遇到了 Cat-tj/web-reader 。这不仅仅是…...

线程化笔记工具:重塑深度思考与知识管理的技术实践

1. 项目概述&#xff1a;一个为线程化思考而生的笔记工具最近在折腾个人知识管理工具时&#xff0c;发现了一个挺有意思的开源项目&#xff1a;alishobeiri/thread-notebook。乍一看名字&#xff0c;可能会以为是又一个普通的Markdown笔记本应用。但深入使用后&#xff0c;我发…...

EL电致发光线与3D打印技术打造可穿戴发光骨架服

1. 项目概述&#xff1a;当发光骨架“活”过来每年万圣节&#xff0c;看着满大街的“幽灵”和“僵尸”&#xff0c;我总想搞点不一样的。直到去年&#xff0c;我决定不再满足于商店里千篇一律的服装&#xff0c;而是想自己动手&#xff0c;做一件真正能“发光”的、有科技感的骨…...

基于HalloWing的交互式徽章:传感器融合与事件驱动编程实践

1. 项目概述&#xff1a;当硬件开发遇上节日创意如果你和我一样&#xff0c;是个喜欢在万圣节搞点“技术流”小把戏的硬件爱好者&#xff0c;那么手头有一块Adafruit的HalloWing开发板&#xff0c;绝对能让你的节日装备脱颖而出。这不仅仅是一个简单的微控制器项目&#xff0c;…...

Linux内存使用分析与泄漏排查

Linux内存使用分析与泄漏排查内存问题往往不像磁盘满那样直观&#xff0c;也不像进程崩溃那样立刻可见。很多服务在内存异常初期仍然可以运行&#xff0c;只是响应逐渐变慢、交换开始活跃、最终被系统回收或触发 OOM。中级 Linux 工程师需要掌握的&#xff0c;不只是看“还剩多…...

基于Go的轻量级自托管IM系统OpenWhisp部署与架构解析

1. 项目概述&#xff1a;一个开源的即时通讯解决方案最近在折腾一个内部协作工具&#xff0c;需要集成一个轻量级的即时通讯模块。市面上成熟的方案不少&#xff0c;但要么是SaaS服务&#xff0c;数据不在自己手里&#xff0c;心里不踏实&#xff1b;要么是像Rocket.Chat、Matt…...

给UE4蓝图和C++开发者的Lua/UnLua入门:什么时候该用,怎么设计架构?

UE4架构设计指南&#xff1a;何时引入Lua与UnLua的最佳实践 当你在UE4项目中频繁修改玩法逻辑时&#xff0c;是否经历过这样的困境&#xff1a;每次调整都需要重新编译C代码&#xff0c;等待时间从几分钟到几小时不等&#xff1b;或者蓝图节点越连越多&#xff0c;最终变成难以…...

大疆M4系列+YOLOV8识别算法 如何训练无人机罂粟识别检测数据集 让非法种植无处可藏:无人机+AI罂粟识别数据集发布,覆盖花期_果期多阶段检测 无人机俯拍+AI识别罂粟

无人机俯拍AI识别罂粟&#xff0c;准确率超95%&#xff01;&#xff0c;助力禁毒攻坚》​ 《科技禁毒再升级&#xff01;YOLO实测mAP 83.9%》​ 《让非法种植无处可藏&#xff1a;无人机AI罂粟识别数据集发布&#xff0c;覆盖花期/果期多阶段检测 智慧巡检 {专业级AI巡查无人机…...

深入解析Ayiks project-genesis-framework:模块化架构元框架的设计与实践

1. 项目概述与核心价值最近在梳理一些老项目的技术债&#xff0c;发现很多早期为了快速上线而写的代码&#xff0c;现在维护起来简直是一场灾难。业务逻辑和底层框架耦合得死死的&#xff0c;想换个数据库或者加个缓存层&#xff0c;都得把整个项目翻个底朝天。这种时候&#x…...