C语言的数据结构:图的基本概念

前言

之前学过了其它的数据结构,如:
集合 \color{#5ecffd}集合 集合 —— 数据元素属于一个集合。
线型结构 \color{#5ecffd}线型结构 线型结构 —— 一个对一个,如线性表、栈、队列,每一个节点和其它节点之间的关系 一个对一个 \color{orange}一个对一个 一个对一个
树型结构 \color{#5ecffd}树型结构 树型结构 —— 一个对多个,如树。

现在要接触一下图这个结构了,图是多个对多个的结构,其没有初始结点,也没有最终结点。每一个节点都称为顶点。
图 \color{#5ecffd}图 ——因为图是若干个顶点,顶点之间相互连接,没有先后顺序,所以图没有顺序存储结构,但可以借助二维数组来表示元素间的关系( 邻接矩阵 \color{orange}邻接矩阵 邻接矩阵)。链式存储结构也可以描述图: 邻接表、邻接多重表、十字链表 \color{orange}邻接表、邻接多重表、十字链表 邻接表、邻接多重表、十字链表

邻接矩阵

存储表示:用两个数组分别存储 顶点表 \color{orange}顶点表 顶点表 邻接矩阵 \color{orange}邻接矩阵 邻接矩阵

#define MAZINT 32767	//极大值
#define MVNUM 100		//最大顶点数
typedef char VerTexType;	//设顶点的数据类型为字符型
typedef int ArcType;		//假设边的权值类型为整型typedef struct {VerTexType vexs[MVNUM];		//顶点表ArcType	arcs[MVNUM][MVNUM];	//邻接矩阵int vexnum,arcnum;			//图的当前点数和边数
}AMGraph;

图的定义和术语

Graph = (Vertex,Edge)
G = (V,E)
V:Vertex 顶点,描述:顶点数据有有穷非空集合。
E:Edge 边,描述:边的有空集合。

🚲有向图:每条边都是有方向的

🚲无向图:每条边都是无方向的

🚲无向完全图:其中任意一点,都和其余所有点相连接(无方向)。

V1 和 V2、V3、V4 相互连接
V2 和 V1、V3、V4 相互连接
V3 和 V1、V2、V4 相互连接
V4 和 V1、V2、V3 相互连接

n 个顶点, n ( n − 1 ) / 2 条边 \color{orange}n个顶点,n(n-1)/2条边 n个顶点,n(n1)/2条边
解释:(n-1):求单个顶点的最大边数
如果有A、B、C三个顶点
则A 的最大边数:A 和 B连,A 和 C 连。 = 2条(因为A无法和自己相连,所以单个顶点的最大边数 = 所有顶点数-自身 = n-1

解释:n(n-1):求所有顶点的最大边数之和
(n-1)为单个顶点的最大边数,乘以n 就为所有顶点的最大边数之和

解释:n(n-1)/2:边数
已经求出 n(n-1) 为所有顶点的最大边数之和,假设有三个顶点A、B、C。
A的最大边数为A 和 B连,A 和 C 连
B的最大边数为B 和 A连,B 和 C 连
可以看出来吗?第一次A和B连,第二次B和A连,其实重复了,边只有一个,但计算了两次。/2 的目的是为了消除所有单条边计算了两次的问题

🚲有向完全图:其中任意一点,都和其余所有点相连接(有方向)。

注意:有向图是每两个点有两条边相连,而不是一条双箭头的边
n 个顶点, n ( n − 1 ) 条边 \color{orange}n个顶点,n(n-1)条边 n个顶点,n(n1)条边
V1 和 V2、V3、V4 相互连接
V2 和 V1、V3、V4 相互连接
V3 和 V1、V2、V4 相互连接
V4 和 V1、V2、V3 相互连接

n 个顶点, n ( n − 1 ) 条边 \color{orange}n个顶点,n(n-1)条边 n个顶点,n(n1)条边
解释:因为每两个顶点有两条边,把 /2去掉就行了。

🚲连通图

含义:所有的顶点都可以通过直接或间接的方式,到达任意一个顶点
无向图的连通图

有向图的连通图

🚲非连通图

含义:有一个或大于一个的顶点,无法到达所有顶点,或无法被所有顶点到达任意一个顶点。
可以看到从V2无法到达任何一个顶点。
有向图的非连通图

无向图的非连通图

🛴有向图

稀疏图 \color{orange}稀疏图 稀疏图: 有很少边或弧的图(e < n l o g n n_{log}n nlogn)。
稠密图 \color{orange}稠密图 稠密图:有较多边或弧的图。
网 \color{orange} 网 :        边/弧带权的图。
邻接 \color{orange}邻接 邻接:有边/弧相连的两个顶点之间的关系。
            存在( V i , V j V_i,V_j Vi,Vj),则称 V i V_i Vi V j V_j Vj互为邻接点;
            存在< V i , V j V_i,V_j Vi,Vj>,则称 V i V_i Vi邻接到 V j V_j Vj V j V_j Vj邻接于 V i V_i Vi
关联(依附) \color{orange}关联(依附) 关联(依附):边/弧与顶点之间的关系。
          存在( V i , V j V_i,V_j Vi,Vj)/< V i , V j V_i,V_j Vi,Vj>,则称该边/弧关联于 V i 和 V j V_i和V_j ViVj
顶点的度 \color{orange}顶点的度 顶点的度:与该顶点相关联的边的数量,记为TD(V)
有向图的入度 \color{orange}有向图的入度 有向图的入度:其它顶点指向该顶点的边数。
有向图的出度 \color{orange}有向图的出度 有向图的出度:该顶点指向其它顶点的边数。
有向图 \color{orange}有向图 有向图中,顶点的度为该顶点的 入度 \color{orange}入度 入度 出度 \color{orange}出度 出度的和。

路径 \color{orange}路径 路径:连接的边构成的顶点序列。
路径长度 \color{orange}路径长度 路径长度:路径上 (边或弧的数目/权值之和)。
回路 ( 环 ) \color{orange}回路(环) 回路():第一个顶点和最后一个顶点相同的路径。
简单路径 \color{orange}简单路径 简单路径:除路径起点和终点可以相同,其余顶点均不相同的路径。
简单路径 ( 简单环 ) \color{orange}简单路径(简单环) 简单路径(简单环):除路径起点和终点相同外,其余顶点均不相同的路径。

权 \color{orange}权 :图中边或弧所具有的相关数称为权。表明从一个顶点到另一个顶点的距离或耗费。
网 \color{orange}网 :带权的图称为网。
子图 \color{orange}子图 子图:设有两个图G=(V,{E})、G1=(V1,{E1})、若 V 1 ∈ V , E 1 ∈ E , 则称 G 1 是 G 的子图。 V1\in V,E1 \in E,则称G1是G的子图。 V1V,E1E,则称G1G的子图。
极大连通子图 \color{orange}极大连通子图 极大连通子图:该子图是G的连通子图,将G图分成多个子图,其中一个子图每个顶点都可以连接,若将一个子图中的顶点移入到该子图,则该子图的这个顶点无法与任意一个顶点相互连通,则称该子图为极大连通子图。
连通分量(强连通分量) \color{orange}连通分量(强连通分量) 连通分量(强连通分量):无向图G的极大连通子图称为G的连通分量。
极小连通子图 \color{orange}极小连通子图 极小连通子图:该子图是G的连通子图,在该子图中删除任何一条边,则该子图不再连通。
生成树 \color{orange}生成树 生成树:包含无向图G所有顶点的极小连通子图。
生成森林 \color{orange}生成森林 生成森林:对非连通图,由各个连通分量的生成树的集合。

图的操作

CreateGraph(*G,V,VR)

初始条件: V是图的顶点集,VR是图中弧的集合。
操作结果:按V和VR的定义 构造图 G \color{orange}构造图G 构造图G

DFSTraverse(G)

初始条件: 图G存在。
操作结果:对图进行 深度优先遍历 \color{orange}深度优先遍历 深度优先遍历

BFSTraverse(G)

初始条件: 图G存在。
操作结果:对图进行 广度优先遍历 \color{orange}广度优先遍历 广度优先遍历

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

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

相关文章

超酷的打字机效果?分享 1 段优质 CSS 代码片段!

大家好&#xff0c;我是大澈&#xff01; 本文约 900 字&#xff0c;整篇阅读约需 1 分钟。 每日分享一段优质代码片段。 今天分享一段优质 CSS 代码片段&#xff0c;实现打字机般的效果或其他类似的离散动画效果。 老规矩&#xff0c;先阅读代码片段并思考&#xff0c;再看代…

Python入门 2024/7/2

目录 格式化的精度控制 字符串格式化 对表达式进行格式化 小练习&#xff08;股票计算小程序&#xff09; 数据输入 布尔类型和比较运算符 if语句 小练习&#xff08;成人判断&#xff09; if-else语句 if-elif-else语句 练习&#xff1a;猜猜心里数字 嵌套语句 猜…

Pytest+Allure+Yaml+PyMsql+Jenkins+Gitlab接口自动化(四)Jenkins配置

一、背景 Jenkins&#xff08;本地宿主机搭建&#xff09; 拉取GitLab(服务器)代码到在Jenkins工作空间本地运行并生成Allure测试报告 二、框架改动点 框架主运行程序需要先注释掉运行代码&#xff08;可不改&#xff0c;如果运行报allure找不到就直接注释掉&#xff09; …

offer7.重建二叉树

根据二叉树的前序遍历和中序遍历重建二叉树 问题描述&#xff1a;输入某二叉树的前序遍历和中序遍历的结果&#xff0c;请重建该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如&#xff0c;输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3…

二叉树之遍历OJ(含迭代)

目录 1.递归实现 前言 &#xff08;1&#xff09;前序遍历 &#xff08;2&#xff09;中序遍历 &#xff08;3&#xff09;后序遍历 2.迭代实现 前言 &#xff08;1&#xff09;前序遍历 方法一 方法二 &#xff08;2&#xff09;中序遍历 方法一 方法二 &#x…

BIOS设置与系统分区

&#x1f4d1;打牌 &#xff1a; da pai ge的个人主页 &#x1f324;️个人专栏 &#xff1a; da pai ge的博客专栏 ☁️宝剑锋从磨砺出&#xff0c;梅花香自苦寒来 目录 一BIOS 1破解密码的前提 2B…

《植物大战僵尸融合版》1.0预览版下载以及安装教程

游戏介绍 《植物大战僵尸融合版》是一款基于经典游戏《植物大战僵尸》的创新改版&#xff0c;由B站UP主蓝飘飘fly开发。这款游戏的特色在于引入了植物融合系统&#xff0c;允许玩家将两种不同的植物合体&#xff0c;创造出具有新特性的植物&#xff0c;从而带来全新的策略对战…

Canvas:掌握贝塞尔曲线与封装路径

想象一下&#xff0c;用几行代码就能创造出如此逼真的图像和动画&#xff0c;仿佛将艺术与科技完美融合&#xff0c;前端开发的Canvas技术正是这个数字化时代中最具魔力的一环&#xff0c;它不仅仅是网页的一部分&#xff0c;更是一个无限创意的画布&#xff0c;一个让你的想象…

文件夹加密软件推荐,这款软件满足各种加密需求

文件夹加密是保护电脑数据安全的重要方式&#xff0c;而在加密文件夹时&#xff0c;我们需要选择专业的文件夹加密软件。下面小编就为大家推荐一款优秀的文件夹加密软件&#xff0c;满足你的各种文件夹加密需求。 文件夹加密超级大师 由于文件夹储存的数据不同&#xff0c;比如…

MCU 是什么?一文了解MCU 产业

MCU&#xff08;Microcontroller Unit&#xff09;&#xff0c;中文名为“微控制器单元”、“单片微型计算机”。MCU 将中央处理器&#xff08;CPU&#xff09;、内存&#xff08;RAM&#xff09;、输入 / 输出界面&#xff08;I/O&#xff09;等等一大堆东西&#xff0c;全部整…

数据结构——带环链表、循环队列问题

1.带环链表问题 1.1给定一个链表判断其是否带环 解决思路&#xff1a;利用快慢指针法&#xff0c;快指针一次走两步慢指针一次走一步&#xff0c;从链表起始位置遍历链表&#xff0c;如果链表带环&#xff0c;则快慢指针一定会在环中相遇&#xff0c;否则快指针先到达链表末尾…

Kafka-服务端-副本同步-源码流程

杂 在0.9.0.0之前&#xff0c;Kafka提供了replica lag.max.messages 来控制follower副本最多落后leader副本的消息数量&#xff0c;follower 相对于leader 落后当超过这个数量的时候就判定该follower是失效的&#xff0c;就会踢出ISR&#xff0c;这里的指的是具体的LEO值。 对…

软考高级之系统分析师及系统架构设计师备考过程记录

0x00 前言 考了两次系分&#xff0c;一次架构&#xff0c;今年系分终于上岸。 在此记录备考过程和一些体会 先说我自己的情况&#xff0c;我本硕都是计算机科班出身&#xff0c;本科的时候搞Java后端开发&#xff0c;硕士搞python和深度学习&#xff0c;但工作之后就基本没碰过…

洞鉴-产品部署及其功能

网络策略&#xff1a;安装&#xff1a; 资源准备 ⼀、系统安装包 https://chaitin-release.oss-cnbeijing.aliyuncs.com/release%2Ff%2F66600aac66bcea13c086319c?Expires1719310707 &OSSAccessKeyIdLTAI5tBpSz7iLYLH51NrVx22&SignaturesOpuVYuKpm9ZBoEzfwiRlJ fLrhQ…

STM32 HAL库读取ID

在stm32f1xx_hal.c文件中由读取ID号的子函数&#xff0c;不同单片机的UID_BASE不同&#xff0c;本单片机用的是STM32F103CBT6,跳转之后可以看到地址为&#xff1a;0x1FFFF7E8 在程序中只需定义一个数组调用读取ID的函数即可 uint32_t UID[3]; while(1) { UID[0] HAL_GetUIDw0…

C盘清理和管理

本篇是C盘一些常用的管理方法&#xff0c;以及定期清理C盘的方法&#xff0c;大部分情况下都能避免C盘爆红。 C盘清理和管理 C盘存储管理查看存储情况清理存储存储感知清理临时文件清理不需要的 迁移存储 磁盘清理桌面存储管理应用存储管理浏览器微信 工具清理 C盘存储管理 查…

VUE3+ AntV Select 选择器:mode=“multiple“和mode=“tags“的区别是什么

文章目录 VUE3 AntV Select 选择器&#xff1a;mode"multiple"和mode"tags"的区别是什么一、解释二、对比演示 VUE3 AntV Select 选择器&#xff1a;mode"multiple"和mode"tags"的区别是什么 一、解释 “mode” 是一个参数&#xff…

SpringSecurity中文文档(Servlet Persisting Authentication)

Persisting Authentication 用户第一次请求受保护的资源时&#xff0c;系统会提示他们输入凭据。提示凭据的最常见方法之一是将用户重定向到登录页。对于请求受保护资源的未经身份验证的用户&#xff0c;总结的 HTTP 交换可能如下所示: Example 1. Unauthenticated User Requ…

VBA字典与数组第十六讲:行、列数不相同的数组间运算规律

《VBA数组与字典方案》教程&#xff08;10144533&#xff09;是我推出的第三套教程&#xff0c;目前已经是第二版修订了。这套教程定位于中级&#xff0c;字典是VBA的精华&#xff0c;我要求学员必学。7.1.3.9教程和手册掌握后&#xff0c;可以解决大多数工作中遇到的实际问题。…

【SpringCloud】Config源码解析

config是一个微服务配置组件&#xff0c;为微服务提供集中化的配置管理服务。config包含服务端和客户端&#xff0c;客户端在启动服务时从服务端拉取配置信息&#xff0c;服务端响应客户端的请求提供具体的配置。本章分析config组件配置信息的拉取过程 1、config服务端 服务端…