关于图的学习

news2024/11/29 4:51:37

一、图的定义

  • 图G由顶点集V和边集E组成,记为G = (V, E),其中V(G)表示图G中顶点的有限非空集;E(G)表示图G中顶点之间的关系(边)集合。若V = { v1,v2,...,vn },则用 | V | 表示图G中顶点的个数,也称图G的阶,E = { (u,v) | u属于V,v属于V },用 | E | 表示图G中的边的条数。
  • 注意:线性表可以是空表,树可以是空树,但图不可以是空,即V一定是非空集
  • 无向图:在图G中,若E是无向边(简称边)的有限集合时,则称为无向图。
  • 补充:边是顶点的无序对,记为(v, w)或(w, v),因为(v, w) = (w, v),其中v, w是顶点。可以说顶点w和顶点v互为邻接点。边(v, w)依附于顶点w和顶点v,或者说边(v, w)和顶点v, w相关联。

例如图1中:
G1 = (V2, E2)
V1 = { A,B,C,D,E }
E1{ (A,B),(B,D),(B,E),(C,D),(C,E),(D,E) }
  • 有向图:在图G中,若E是有向边(也称弧)的有限集合时,则称为有向图。
  • 补充:弧是顶点的有序对,记为<v, w>,其中v, w是顶点,v称为弧尾,w称为弧头,<v, w>称为顶点v到顶点w的弧,也称v邻接到w,或w邻接自v。
例如图2中:
G2 = (V1, E1)
V2 = { A,B,C,D,E }
E2= { <A,B>,<A,C>,<A,D>,<A,E>,<B,A>,<B,C>,<B,E>,<C,D> }
  •  简单图:1.不存在重复边。2.不存在顶点到自身的边。
  • 多重图:1.图G中某两个结点之间的边数多于1条,又允许顶点通过同一条边和自己关联。

顶点的度、入度、出度

  • 对于无向图:顶点v的度是指依附于该顶点的边的条数,记为TD(v)
  • 对于有向图:入度是以顶点v为终点的有向边的数目,记为ID(v)                                                                     出度是以顶点v为起点的有向边的数目,记为OD(v)                                                                     顶点v的度等于其入度和出度之和,即TD(v)=ID(v)+OD(v)
  • 路径:在一个图G=(V,E)中,从顶点i到顶点j的一条路径是一个顶点序列(i,i1,i2,...,j)
  • 路径长度:是指一条路径上经过的边的数目
  • 回路:第一个顶点和最后一个顶点相同的路径称为回路或环
  • 简单路径:在路径序列中,顶点不重复出现的路径(即不含回路的路径)
  • 简单回路:除了第一个顶点和最后一个顶点外,其余顶点不重复出现的回路
  • 点到点的距离:从顶点u出发到顶点v的最短路径若存在,则此路径的长度称为从u到v的距离。若从u到v根本不存在路径,则记该距离为无穷。

子图:

  • 设有两个图G=(V,E)和G1=(V1,E1),若V1是V的子集,即V1属于V,且E1是E的子集,即E1属于E,则称G1是G的子图。
  • 生成子图:若有满足V(G1)=V(G),则称其为G的生成子图。 

连通图(是对无向图而言):

  • 1.在无向图G中,若从顶点i到顶点j有路径,则称顶点i和顶点j是连通的。
  • 2.如果对于图中任意两个顶点都连通,则称G是连通图,否则称为非连通图。                            如果G是连通图,则最少有n-1条边;                                                                                          如果G是非连通图,则最多可能有C^{_{n-1}^{2}};(比如一共有5个顶点,只需要拿出4个顶点并且从中任    意选取两个顶点。)
  • 3.连通分量:无向图中的极大连通子图称为连通分量。                                                                显然,连通图只有一个连通分量,就是它本身,而非连通图有多个连通分量

 

强连通图(是对有向图而言):

  • 1.若图中任何一对顶点都是强连通的,则称此图为强连通图                                                           注意:如果G是强连通图,则最少有n条边(形成回路)
  • 2.强连通分量:有向图中的极大强连通子图。                                                                              显然,强连通图只有一个强连通分量,即本身。非强连通图有多个强连通分量

 

 生成树:

  • 连通图的生成树是包含图中全部顶点的一个极小连通子图(极小是指在这个图里面的边的数量尽可能少)
  • 若图中顶点数为n,则它的生成树含有n - 1条边。对于生成树而言,若砍去它的一条边,则会变成非连通图,若加上一条边则会形成一个回路。

 生成森林:
在非连通图中,连通分量的生成树构成了非连通图的生成森林。

 

边的权、带权图/网、带权路径长度

  • 边的权:在一个图中,每条边都可以标上具有某种含义的数值,给数值称为该边的权值。
  • 带权的图/网:边上带权值的图称为带权图,也称网。
  • 带权路径长度:当图是带权图时,一条路径上所有边的权值之和,称为该路径的带权路径长度 

几种特殊形态的图

  • 完全图:若图中每两个顶点之间都存在着一条边,则称该图为完全图。
  • 无向完全图:无向图中任意两个顶点之间都存在边。
  • 有向完全图:有向图中任意两个顶点之间都存在方向相反的两条弧。
  • 注意:完全有向图有n(n - 1)条边;完全无向图有n(n - 1) / 2条边。
  • 稀疏图:边数很少的图
  • 稠密图:当一个图接近完全图时,称为稠密图。

 

二、图的存储结构

  • 基本的分为邻接矩阵和邻接表 

邻接矩阵

  • 邻接矩阵:是一种表示顶点之间邻接关系的矩阵
  • 邻接矩阵是图的一种顺序存储结构,从邻接矩阵的行数或列数可知顶点数。 
设G=(V,E)是具有n个顶点的不带权图,则G的邻接矩阵的具有如下定义的n阶方阵A
A[i][j]=1,表示有边(i,j)或者<i,j>
A[i][j]=0,表示没有边(i,j)(0<=i,j<=n-1)
A[i][i]=0,表示顶点i到自身没有边

 

#define MaxVertexNum 100//顶点数目的最大值
#define INFINITY  100000//宏定义常量“无穷”
typedef char VertexType;//顶点的数据类型
typedef int EdgeType;//带权图中边上权值的数据类型
typedef struct
{
	VertexType vexs[MaxVertexNum];//顶点表(存放顶点)
	EdgeType edges[MaxVertexNum][MaxVertexNum];//邻接矩阵,边表(存放任意两个顶点之间的距离)
	int vexnum, edge;//图的当前顶点数和边数/弧数
}MGraph;

邻接矩阵的性能分析

  • 空间复杂度:只和顶点数相关,和实际的边数无关
  • 适合用于存储稠密图
  • 无向图的邻接矩阵是对称矩阵,可以压缩存储(值存储上三角区/下三角区)

 邻接表

  • 邻接表是图的一种链表和顺序表相结合的存储结构
  • 核心思想 : 对具有n个顶点的图建立n个线性链表存储该图                                            
  • 1.为每个顶点建立一个单链表,边结点由三个域组成,adjvex指示与顶点i邻接的顶点的编号,nextarc指向对应下一条边的节点,info存储与边相关的信息,如权值等。
  • 2.表头节点有两个域组成,data存储顶点i对应的名称或其他信息,firstarc指向对应顶点i的链表中的第一个边节点。 

 

typedef char ElemType;
typedef int InfoType;
#define MAXV 100
typedef struct ANode//边结点类型
{
	int adjvex;//该边的终点位置
	struct ANode* nextarc;//指向一下条边的指针
	InfoType info;//该边的相关信息,如带权图可存放权重
}ArcNode;

typedef struct Vode//表头结点的类型
{
	ElemType data;//顶点信息
	ArcNode* firstarc;//指向第一条边
}VNode;

typedef VNode AdjList[MAXV]; //AdjList是邻接表类型
typedef struct
{
	AdjList adjlist;//邻接表(表头结点组成一个数组)
	int n, e;//定义顶点数和边数
}AGraph;//图的领接表类型

 

 

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

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

相关文章

PyQt5可视化编程-布局管理

在一个GUI程序里&#xff0c;布局是一个很重要的方面。布局就是如何管理应用中的元素和窗口。有两种方式可以搞定&#xff1a;绝对定位和PyQt5的layout类 1.绝对定位: 每个程序都是以像素为单位区分元素的位置&#xff0c;衡量元素的大小。所以我们完全可以使用绝对定位搞定每个…

【Linux】网络编程基础

文章目录网络基础1.网络与操作系统的关系2.计算机网络发展3.协议3.1协议分层3.2OS七层模型3.3TCP/IP五层模型4.网络传输基本流程4.1数据包的封装和分用4.1.1报头和有效载荷4.2局域网的两台主机通信4.3跨网络的两台主机通信5.IP地址和MAC地址5.1IP地址5.2MAC地址5.3IP地址和MAC地…

XSCTF联合招新【真是阳间题】(MSIC+Crypto)

文章目录XSCTF联合招新【真是阳间题】&#xff08;MSICCrypto&#xff09;Step1&#xff1a;查看文件step2&#xff1a;操作流程关于Base64&#xff0c;Base32&#xff0c;Base16进制的区别方法:Base64&#xff1a;Base32:Base16:XSCTF联合招新【真是阳间题】&#xff08;MSICC…

控制瑞芯微平台GPIO(输入、输出、电平读取)

控制瑞芯微平台GPIO&#xff08;输入、输出&#xff09;GPIO编号计算控制步骤输出高电平读取电平GPIO编号计算 GPIO编号 BANK * 32 GPIO_PIN GPION_MP N * 32 8 * (M -1) P 示例&#xff1a;GPIO7_C2 7 X 32 8 X (3-1) 2 242 GPIO2_A1 2 X 32 8 X (1-1) 1 73 A对…

IO流~File

File File类概述和构造方法 File&#xff1a;它是文件和目录路径名的抽象表示 文件和目录是可以通过File封装成对象的对于File而言&#xff0c;其封装的并不是一个真正存在的文件&#xff0c;仅仅是一个路径名而已。它可以是存在的&#xff0c;也可以是不存在的。将来是要通…

【PyTorch深度强化学习】DDPG算法的讲解及实战(超详细 附源码)

需要源码请点赞关注收藏后评论区留言留下QQ~~~ 一、DDPG背景及简介 在动作离散的强化学习任务中&#xff0c;通常可以遍历所有的动作来计算动作值函数q(s,a)q(s,a)&#xff0c;从而得到最优动作值函数q∗(s,a)q∗(s,a) 。但在大规模连续动作空间中&#xff0c;遍历所有动作是不…

Css3 2D转换 2D转换之移动tranlate

转换&#xff08;transform&#xff09;是css3中具有颠覆性的特征之一&#xff0c;可以实现元素的位移、旋转、缩放等效果。 转换你可以简单理解为变形。 移动&#xff1a;translate旋转&#xff1a;rotate缩放&#xff1a;scale 2D转换是改变标签在二维平面上的位置和形状的…

Spring - InstantiationAwareBeanPostProcessor 扩展接口

文章目录Preorg.springframework.beans.factory.config.InstantiationAwareBeanPostProcessorInstantiationAwareBeanPostProcessor 注册过程源码分析postProcessBeforeInstantiation的执行时机源码解析使用场景 &#xff1a; 创建代理类Pre Spring Boot - 扩展接口一览 org.s…

AWS Academy LMS 考勤 - 教师

AWS Academy LMS 考勤 &#xff0d; 教师 在 AWS Academy LMS 教材使用 &#xff0d; 教师 说明了如何使用 AWS Academy LMS 中所提供的线上素材&#xff0c;而开始上课后&#xff0c;教师必须要去了解学生对于教材的实际使用状况&#xff0c;在这里介绍如何查看学生在各模块知…

Jsoup爬虫入门实战

一、Jsoup介绍 jsoup 是一款基于 Java 的HTML解析器&#xff0c;它提供了一套非常省力的API&#xff0c;不但能直接解析某个URL地址、HTML文本内容&#xff0c;而且还能通过类似于DOM、CSS或者jQuery的方法来操作数据&#xff0c;所以 jsoup 也可以被当做爬虫工具使用。 相关…

进程通信(2) ----- 信号

文章目录一、实验目的二、实验内容三、实验要求四、实验步骤及操作五、程序源码1. 信号发送 fkill.c2. 信号监控 mysignal.c一、实验目的 1.了解进程通信间的信号机制 2.掌握进程通信间的信号编程模型 二、实验内容 信号是通信量最小的一种进程间通信形式&#xff0c;也用于…

【Gradle】三、深入了解Gradle

这里写目录标题一、 Gradle项目的生命周期Initialization 阶段Configuration 阶段&#xff1a;Execution 阶段&#xff1a;二、settings.gradle 文件三、Task1、 案例四、Dependencies1、依赖的分类2、依赖的下载3、依赖的类型4、api与implementation的区别5、依赖冲突及解决方…

(二) Docker安装

Docker安装一、前提二、安装三、设置阿里云镜像加速四、分析Run底层原理五、Docker会比VM虚拟机快的原因一、前提 CentOS 仅发行版本中的内核支持 Docker。Docker 运行在CentOS 7 (64-bit)上&#xff0c; 要求系统为64位、Linux系统内核版本为 3.8以上&#xff0c;这里选用Cen…

plot3D | 三维数据绘图(1):散点图、栅格图、透视图

专注系列化、高质量的R语言教程推文索引 | 联系小编 | 付费合集plot3D可以视作基础包graphcis的拓展包&#xff0c;用于多维数据的图形绘制。基础绘图系统里好像只有一个persp()函数与三维绘图有关&#xff0c;关于该函数的介绍见如下推文&#xff1a;基础绘图系统&#xff08;…

【Hack The Box】linux练习-- Blunder

HTB 学习笔记 【Hack The Box】linux练习-- Blunder &#x1f525;系列专栏&#xff1a;Hack The Box &#x1f389;欢迎关注&#x1f50e;点赞&#x1f44d;收藏⭐️留言&#x1f4dd; &#x1f4c6;首发时间&#xff1a;&#x1f334;2022年11月21日&#x1f334; &#x1f…

二、Robot Framework 对数据库的操作

Robot Framework 对数据库的操作2.1 DatabaseLibrary 库的使用1. 安装 DatabaseLibrary 库2. 测试套件中导入 DatabaseLibrary 库3. 安装 pure-PythonMySQL client library2.1.1 如何连接数据库2.1.2 如何断开数据库2.1.3 如何对数据库的表进行查询2.1.4 如何插入和删除数据2.1…

java EE初阶 — Thread类及常见方法

文章目录1.Thread 常见的构造方法2.Thread 几个常见的属性3.启动一个线程 - start()4.终止一个线程4.1 使用标志位来控制线程是否要停止4.2 使用 Thread 自带的标志位来进行判定5.等待一个线程 - join()6.获取当前线程引用7.休眠当前线程1.Thread 常见的构造方法 Thread() - 创…

【Spring】——11、了解BeanPostProcessor后置处理器

&#x1f4eb;作者简介&#xff1a;zhz小白 公众号&#xff1a;小白的Java进阶之路 专业技能&#xff1a; 1、Java基础&#xff0c;并精通多线程的开发&#xff0c;熟悉JVM原理 2、熟悉Java基础&#xff0c;并精通多线程的开发&#xff0c;熟悉JVM原理&#xff0c;具备⼀定的线…

Packet Tracer - 综合技能练习(通过调整 OSPF 计时器来修改 OSPFv2 配置)

地址分配表 设备 接口 IP 地址 子网掩码 RA G0/0 192.168.1.1 255.255.255.0 RB G0/0 192.168.1.2 255.255.255.0 RC G0/0 192.168.1.3 255.255.255.0 S0/0/0 209.165.200.225 255.255.255.252 拓扑图 场景 在此综合技能练习中&#xff0c;您的重点是 OSPF…

【滤波跟踪】不变扩展卡尔曼滤波器对装有惯性导航系统和全球定位系统IMU+GPS进行滤波跟踪【含Matlab源码 2232期】

⛄一、简介 针对室内定位中的非视距&#xff08;Non-Line-of-Sight,NLOS&#xff09;现象,提出一个新型算法进行识别,同时有效缓解其影响.主要通过超宽带&#xff08;Ultra-Wideband,UWB&#xff09;定位系统与惯性导航系统&#xff08;Inertial Navigation System,INS&#x…