数据结构——图基础

本篇参考了王道及b站懒猫老师王卓老师的课程,进行归纳总结,本文使用的语言是c语言,部分代码没有实现或使用伪代码方式,文章内容共包含了以下几个部分:

 那么接下来就从图的基本概念进行学习:

图的基本概念

图G由顶点集V和边集E组成,记为G=(V,E),其中VG)表示图G中顶点的有限非空集;E(G)表示图G中顶点之间的关系(边)集合。若V={v1,v2,v3,…… },则用|V表示图G中顶点的个数。
E={(u, v)| u∈v,v∈V},用|E表示图G中边的条数。

线性表和树可以为空,但图不能为空,其顶点集不能为空,但边可以为空

有向图

 若E是有向边(也称弧)的有限集合时,则图G为有向图。弧是顶点的有序对,记为<v,w>,其中v w是顶点,v称为弧尾,w称为弧头,<v, w>称为从v到w的弧,也称v邻接到w。

如下图:边集合为E={<A,B>,<E,A>,<C,A>,<B,C>,<C,D>,<D,E>,<C,E>}

无向图

若E是无向边(简称边)的有限集合时,则图G为无向图。边是顶点的无序对,记为(vy, w)或(w, v)。可以说w和v互为邻接点。边(v, w)依附于w和v,或称边(v, w)和v, w相关联。

如下图:边集合为E={(A,B),(E,A),(C,A),(B,C),(C,D),(D,E),(C,E)}

筒单图、多重图
一个图G如果满足:①不存在重复边;②不存在顶点到自身的边,那么称图G为简单图。图6.1中G,和 G均为简单图。若图中某两个顶点之间的边数大于1条,又允许顶点通过一条边和自身关联,则称图G为多重图。多重图和简单图的定义是相对的。数据结构中仅讨论简单图。
完全图(也称简单完全图)
对于无向图,E的取值范围为О到n(n -1)/2,有n(n -1)/2条边的无向图称为完全图,在完全图中任意两个顶点之间都存在边。对于有向图,E的取值范围为0到n(n -1),有n(n -1)条弧的有向图称为有向完全图,在有向完全图中任意两个顶点之间都存在方向相反的两条弧

子图

设有两个图G=(V, E)和G' =(v,E'),若V是V的子集,且E是E的子集,则称G是G的子图。若有满足V(G')=V(G)的子图G,则称其为G的生成子图。
注意:并非V和E的任何子集都能构成G的子图,因为这样的子集可能不是图,即E的子集中的某些边关联的顶点可能不在这个V的子集中。

连通、连通图和连通分量
在无向图中,若从顶点v到顶点w有路径存在,则称v和w是连通的。,若图G中任意两个顶点都是连通的,则称图G为连通图,否则称为非连通图。无向图中的极大连通子图称为连通分量。

强连通图、强连通分量
在有向图中,如果有-一对顶点v和w,从v到w和从w到v之间都有路径,则称这两个顶点是强连通的。若图中任何一对顶点都是强连通的,则称此图为强连通图。有向图中的极大强连通子图称为有向图的强连通分量,

生成树、生成森林
连通图的生成树是包含图中全部顶点的一个极小连通子图。若图中顶点数为n,则它的生成树含有n-1条边。包含图中全部顶点的极小连通子图,只有生成树满足这个极小条件,对生成树而言,若砍去它的一条边,则会变成非连通图,若加上一条边则会形成一个回路。在非连通图中,连通分量的生成树构成了非连通图的生成森林。

注意:区分极大连通子图和极小连通子图。极大连通子图是无向图的连通分量,极大即要求该连通子图包含其所有的边;极小连通子图是既要保持图连通又要使得边数最少的子图。

边的权和网

在一-个图中,每条边都可以标上具有某种含义的数值,该数值称为该边的权值。这种边上带
有权值的图称为带权图,也称网。

稠密图、稀疏图
边数很少的图称为稀疏图,反之称为稠密图。稀疏和稠密本身是模糊的概念,稀疏图和稠密图常常是相对而言的。
路径、路径长度和回路
顶点v,到顶点v之间的一条路径是指顶点序列当然关联的边也可理解为路径的构成要素。路径上边的数目称为路径长度。第一个顶点和最后一个顶点相同的路径称为回路或环。若一个图有n个顶点,并且有大于n-1条边,则此图一定有环。
简单路径、简单回路
在路径序列中,顶点不重复出现的路径称为简单路径。.除第一个顶点和最后一个顶点外,其余顶点不重复出现的回路称为简单回路。

图的存储结构与基本操作

邻接矩阵法

所谓邻接矩阵存储,是指用一个一-维数组存储图中顶点的信息,用一个二维数组存储图中边的信息(即各顶点之间的邻接关系),存储顶点之间邻接关系的二维数组称为邻接矩阵

如下图所示的表格,将顶点作为横纵坐标,交叉处为权值,此图为无向网即没有方向且有权值,当两个顶点之间无边时用无穷大来表示。如图可以发现规律,各数值按照对角线对称

这里的图和下面创建的是一样的,可以将代码和图一起进行剖析

邻接矩阵结构体成员 

#define MAXINT 32767            //最大值即无穷大
#define VERTEX_MAX  100       //最大顶点数
typedef struct Gragh {
	char Vertex[VERTEX_MAX];     //顶点数组
	int Edge[VERTEX_MAX][VERTEX_MAX];//边表
	int vernum,arcnum; //顶点个数,边数
}Gragh;

邻接矩阵创建

  • 3
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序lee

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值