数据结构:图

本文详细介绍了图的定义,包括无向图和有向图,以及图的顶点与边的关系。图的度、连通性、完全图和稀疏图等概念被逐一阐述。文章还讨论了图的存储结构,如邻接矩阵、邻接表、十字链表、邻接多重表和边集数组,以及在不同结构下的优缺点。最后,文章深入探讨了图的遍历算法,包括深度优先遍历和广度优先遍历,并提供了相应的代码实现。这两种遍历方法各有适用场景,深度优先遍历适合明确目标,而广度优先遍历则在寻找相对最优解时更有优势。
摘要由CSDN通过智能技术生成

图(Graph)是由顶点的有穷非空集合和顶点之间边的集合组成,通常表示为:G(V,E)。
其中G表示一个图,V是图G中顶点的集合,E是图G中边的集合。

一、图的定义

线性表中,元素数据之间是串起来的,仅由线性关系,每个数据元素只有一个直接前驱和一个直接后继。
树形结构中,数据元素之间有着明显的层次关系,并且每一层上的数据元素可能和下一层中多个元素相关,但只能和上一层的一个元素相关。这和一对父母可能有多个孩子,但一个孩子只能有一对父母是一个道理。可现实中,人与人之间关系就非常复杂,比如我认识的朋友,可能他们之间也互相认识,这就不是简单的一对一、一对多,研究人际关系很自然会考虑到多对多的情况。那就是我们今天要研究的主题——图。图是一种较线性表和树更加复杂的数据结构。在图形结构中,结点之间的关系可以是任意的,图中任意两个数据元素之间都可能相关。

图(Graph)是由顶点的有穷集合和顶点之间边的集合组成,通常表示为:G(V , E),G表示一个图,V表示G中订单的集合,E是G中边的集合。

对于图的定义,我们需要明确几个注意的地方。

  • 线性表中我们把数据元素叫元素,树中将数据元素叫结点,在图中数据元素,我们称之为顶点(Vertex)
  • 线性表中我们可以没有数据元素,称为空表。树中可以没有结点,叫做空树。但是在图结构中,不允许没有顶点。在定义中,V是顶点的集合,则强调了顶点集合V的又穷非空。
  • 线性表中,相邻的数据元素之间具有线性关系,树结构中,相邻两层的结点具有层次关系,而图中,任意两个顶点都可能有关系,顶点之间的逻辑关系用边来表示,边集可以是空的。

1.各种图定义

无向边:若顶点vi到vj之间的边没有方向,则称这条边为无向边(Edge),用无序偶对(vi , vj)来表示。如果图中任意两个顶点之间的边都是无向边,则称该图为无向图。由于是无方向的,连接顶点A和顶点D的边,可以表示成无序对(A,D),也可以写成(D,A)。

有向边:若从顶点vi到vj的边有方向,则称这条边为有向边,也称为弧(Arc)。用有序偶< vi,vj>,vi称为弧尾(Tail),vj称为弧头(Head)。如果图中任意两个顶点之间的边都是有向的,则称该图为有向图(Directed graphs)。连接顶点A到D的有向边就是弧,A是弧尾,D是弧头,< A,D>表示弧,注意不能写成< D, A>。

注意:无向边用小括号“( )”表示,而有向边用尖括号表示“<>”表示。

在图中,若不存在顶点到其自身的边,且同一条边不重复出现,则成这样的图为简单图。我们在这边讨论的都是简单图。

在无向图中,如果任意两个顶点之间都存在边,则成该图为无向完全图。含有n个顶点的完全无向图有((n-1) * n / 2)条边。

在有向图中,如果任意两个顶点之间都存在方向互为相反的两条弧,则称该图为有向完全图。含有n个顶点的完全有向图有n x (n - 1)条边。

从这里我们也可以得出结论:
对于有n个顶点和e条边的图,无向图0≤e≤n(n-1)/2,
有向图0≤ e ≤ n(n-1)。

有很少条边或弧的图称为稀疏图,否则称为稠密图。但是这里的稀疏和稠密是模糊的概念,都是相对而言的、

有些图的边或弧具有他相关的数字,这种与图的边或弧相关的数叫做权(Weight)。这些权可以表示从一个顶点到另一顶点的距离活耗费。这种带权的图通常称为网(Network)。

假设有两个图G = (V,{E’})和G’ = (V’ , {E’}),如果V’ 是V子集,E’是E的子集,则称G’是G的子图(SubGraph)

2.图的顶点与边间关系

对于无向图G = (V,{E}),如果边(v , v’) ∈ E,则称顶点v和v’互为邻接点(Adjacent),即v和v’相邻接边(v,v’)依附(incident)于顶点v和v’,或者说(v,v’)与顶点v和v’相关联。顶点v的度(Degree)是和v相关联的边的数目,记为TD(v)。无向图的边数就是各顶点度数和的一半,多出的一半是因为重复两次计数。简记之,e = ½ ∑TD(vi)。

对于有向图G = (V,{E}),如果弧< v,v’> ∈ E,则称顶点v邻接到顶点v’,顶点v’邻接自顶点v。弧< v,v’>和顶点v、v’相关联。以顶点v为头的弧的数目称为v的入度OD(v);以v为尾的弧的数目称为v的出度(OutDegree),记为OD(v);顶点v的度为TD(v) = ID(v) + OD(v)。有向图的边等与各顶点的出度和等与各顶点的入度和。
e = ∑ID(vi) = ∑OD(vi)。

无向图G = (V,{E})中从顶点v到顶点v’的路径(Path)是一个顶点序列(v = Vi,0 , Vi,1 ,…, Vi,m = v’)其中(Vi,j-1 , Vi,j)∈E ,1 ≤ j ≤ m。

如果G是有向图,则路径也是有向的,顶点序列就满足< Vi,j-1,Vi,j>∈E ,1≤ j ≤ m。

树种根结点到任意结点的路径是唯一的,但是图中顶点与顶点之间的路径却是不唯一的。

路径的长度是路径上的边或弧的数目

第一个顶点到最后一个顶点相同的路径称为回路或环(Cycle)。序列中顶点不重复出现的路径称为简单路径。除了第一个顶点和最后一个顶点之外,其余顶点不重复出现的回路,称为简单回路或环。

3.连图相关术语

在无向图G中,如果从顶点v到顶点v’有路径,则称v和v’是连通的。如果对于图中任意两个顶点vi,vj ∈ V,vi和vj都是连图的,则称G是连图图(Connected Graph)

无向图中的极大连图子图称为连通分量。注意连图分量的概念,他强调:

  • 要是子图;
  • 子图要是连通的;
  • 连图子图含有极大顶点数;
  • 具有极大顶点数的连通子图包含依附于这些顶点的所有边。

在有向图G中,如果每一对vi,vj∈V,vi ≠ vj,从vi到vj和从vj 到vi都存在路径,则称G是强连通图。有向图中的极大强连通子图称做有向图的强连通分量。

现在我们再来看连通图的生成树定义。
所围的一个连通图的生成树是一个极小的连通子图,它含有图中全部n个顶点,但只有足以构成一棵树的n - 1条边。不过n-1条边不一定是生成树。

如果一个有向图恰有一个顶点的入度为0,其余顶点的入度均为1,则是一棵有向树。对有向树的理解比较容易,所谓入度为0其实就相当于树种的根结点,其余顶点入度为1就是说树的非根结点的双亲只有一个。一个有向图的生成森林由若干棵有向树组成,含有图中全部顶点,但只有足以构成若干棵不相交的有向树的弧

4.图的定义和术语总结

图按照有无方向来分,分为无向图有向图。无向图由顶点和边组成,有向图由顶点组成。弧有弧尾弧头之分。

图按照边或弧的多少分稀疏图稠密图。如果两个顶点之间都存在边叫完全图,有向的叫有向完全图。若无重复的边或顶点到自身的边叫简单图

图中顶点之间有邻接点、依附的概念。无向图顶点的边数叫做,有向图顶点分为入度和出度。

图上的边或弧上带权的称为

图中顶点之间存在路径,两顶点之间存在路径说明是连通的,如果路径最终回到起始点则称为,当中不重复叫简单路径。若任意两顶点都是连通的,则图就是连通图。有向则称为强连通图。图中有子图,若子图极大连图则就是连图分量,有向的则称强连图分量。

无向图中连通且n个顶点n -1条边叫生成树。有向图中一顶点的入度为0其余项入度为1的叫有向树。一个有向图由若干棵有向树构成生成森林

二、图的抽象数据类型

图作为一种数据结构,它的抽象数据类型带有自己的特点,正因为它的复杂,运用广泛,使得不同的应用需要不同的运算集合,构成不同的抽象数据操作。我们这里就来看看图的基本操作。

ADT图(Graph)
Data
    顶点的有穷非空集合和边的集合。
Operation
    CreateGraph(*G,V,VR):按照顶点集V和边弧集VR的定义构造图G。
    DestroyGraph(*G):图G存在则销毁
    LocateVex(G,u):若图中存在顶点u,则返回图中位置。
    GetVex(G,V):返回图G中顶点v的值。
    PutVex(G,v,value):将图G中顶点v赋值value。
    FirstAdjVex(G,*v):返回顶点v的一个邻接顶点,若顶点在G无邻接顶点返回空。
    NextAdjVex(G,v,*w):返回顶点v想对于顶点w的下一个邻接顶点,若w是v的最后一个邻接点则返回空。
    InsertVex(*G,v):在图G中增添新顶点v。
    DeleteVex(*G,v):删除图G中顶点v及其相关的弧。
    InsertArc(*G,v,x):在图G中增添弧<v,w>,若G是无向图,还需要增添对称呼<w,v>。
    DeleteArc(*G,v,x):在图G中删除弧<v,w>,若G是无向图,则还删除对称弧。
    DFSTraverse(G):在图G中进行深度优先遍历,在遍历过程中对每个顶点调用
    HFSTraverse(G):在图G中进行广度优先遍历,在遍历过程对每个顶点调用。

三、图的存储结构

图的存储结构相较线性表来说就更加复杂了。首先,我们口头上说的“顶点的位置”或“邻接点的位置”只是一个相对的概念。其实从图的逻辑结构定义来看,图上任何一个顶点可被看做第一个顶点,任一顶点的邻接点也不存在次序关系。

也正由于图的结构比较复杂,任意两个顶点之间都可

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值