快速掌握图

本文详细介绍了图的定义,包括有向图和无向图,以及图的基本术语,如子图、完全图、稠密图等。接着,讨论了图的存储结构,如邻接矩阵、邻接表和十字链表,并比较了它们的优缺点。最后,概述了图的遍历方法,包括深度优先搜索和广度优先遍历,以及如何避免在遍历过程中陷入回路。
摘要由CSDN通过智能技术生成

图的定义

图G是由两个集合V和E组成,记为G=(V,E)
V(G)和E(G)表示图的顶点集和边集。其中E(G)可以为空, 表示这个图只有定点没有边

图的分类

有向图和无向图

在这里插入图片描述
在这里插入图片描述
其中第一个图就是无向图:G1=({V1,V2,V3,V4,V5},{(v1,v2),(v1,v3),(v2,v5)(v3,v5),(V4,V5)})
第二幅图就是有向图:G2=({V1,V2,V3,V4,V5},{<V1,V2>,<V1,V3>,<V3,V4>,<V4,V5>,<V5,V3>})
要注意的是,在有向图中,边集中的边需要用尖括号表示,在无向图中,边集需要用小括号表示。

图的基本术语

用n表示定点数,用e表示边的数目
(1)子图:在一个图中,一个图的顶点和边是另外一个图的顶点和边的子集,那么这个图就是原来的图的子图(类比数学中的子集的概念)
(2)无向完全图和有向完全图:对于无向图,如果边为n(n+1)/2,那么就是无向完全图
在有向图中,如果边n(n+1)——有向完全图
(3)稀疏图和稠密图:边很多的就是稠密图,相应的,少的就是稀疏图
(4)权和网:权这个跟数学中的相类似,网就是带权的图
(5)邻接点:两个点有同一个边。如果一条边e连接了两个顶点v和v1,那么我们可以称边e依附于顶点v和v1,或者说,边e和v和v1相关联
(6)度,入度和出度:很好理解不解释
但是要知道的是,入度和出度这种说法是对于有向图而言的,无向图中没有入度和出度这种说法。在有向图中,节点的度=入度+出度
(7)路径和路径长度
(8)回路或环
(9)简单路径,简单回路或简单环:顶点不重复出现的路径称为简单路径。
除了第一个和最后一个顶点以外,其他顶点都不重复出现的就是简单回路或简单环
(10)连通,连通图,连通分量:连通分量,就是无向图中的极大连通子图
极大连通子图,如果再增加一个顶点就是不连通的了
在这里插入图片描述在上面中,我们会发现,图a有三个子图我们拆分成左边这样,b,c和d都是a的极大连通子图

(11)强连通图和强连通分量:(注意,强连通图和强连通分量都是相对于有向图而言的)
在有向图中,任意两个顶点之间都有路径——强连通图
在强连通图G中的极大强连通子图——强连通分量
在这里插入图片描述
(12)连通图的生成树:一个极小连通子图,包含图中的所有顶点但是只有n-1条边(首先,一定是连通的)
注意:一棵有n个顶点的生成树有且仅有n-1条边
如果一个图有n个顶点或者小于n-1条边,那就是非连通图
如果他多于n-1条边,那一定有环
但是,有n-1条边的图不一定是生成树
(13)有向树和生成森林:有一个顶点入度是0,其余顶点的入度全部是1的有向图就是有向树,由若干颗有向树构成的不相交的就是生成森林。
(14)极小连通子图如果再删除一条边就是不连通的了
(15)生成树:包含了无向图G的所有顶点的极小连通子图

图的存储结构

1.邻接矩阵表示法(数组表示法)
表示顶点之间相邻关系的矩阵。
如果两个顶点之间有边,就用1表示,如果没有就用0表示。
邻接矩阵一定是方阵
如果是一个网的话(边之间有权),那么如果两个顶点之间有边,就用边的权值表示,如果没有,就用无穷表示

建立一个顶点表(记录各个顶点的信息)和邻接矩阵(表示各个顶点之间的关系)
在这里插入图片描述
无向图的邻接矩阵表示:
在这里插入图片描述
分析:(1)无向图的邻接矩阵是对称的
(2)顶点i的度=第i行(列)中1的个数
(3)特别的,完全图中,对角线元素都是0,其余的都是1

有向图的邻接矩阵表示
在这里插入图片描述
注意:第i行表示以当前节点为弧尾的出度边
第i列表示以当前为节点的弧头的入度边

分析:(1)有向图的邻接矩阵可能不是对称的
(2)顶点的出度=第i行元素之和
顶点的入度=第i列的元素之和
顶点的度=第i行元素之和和第i列的元素之和

网的邻接矩阵表示
在这里插入图片描述

邻接矩阵

#define MaxInt 32767   //表示极大值,即无穷
#define MVNum 100    //最大顶点数
typedef char VerTexType    //设顶点的数据类型为字符型
typedef int ArcType        //假设边的权值类型为int型

typedef struct 
{
   
	VerTexType vexs[MVNum];    //顶点表
	ArcType arcs[MVNum][MVNum];   //邻接矩阵
	int vexnum,arcnum;      //图的当前顶点数和边数
}AMGraph;

采用邻接矩阵法创建无向网
步骤:
(1)输入总顶点数和总边数
(2)依次输入顶点信息(初始化顶点表)
(3)将邻接矩阵全部元素初始化为无穷
(4)初始化邻接矩阵

Status creatUDN(AMGraph &G)
{
   
	cin>>G.vexnum>>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值