图(Graph)是由顶点的有穷非空集合和顶点之间边的集合组成,通常表示为:G(V,E),其中,G表示一个图,V是图G中顶点的集合,E是图G中边的集合。
7.2 图的定义
线性表:数据元素之间是被串起来的,仅有线性关系,每个数据元素只有一个直接前驱和一个直接后继,是一对一的关系。
树:数据元素之间有明显的层次关系,每一层上的数据元素可能和下一层中多个元素相关,但只能和上一层中一个元素相关,这和一对父母可以有多个孩子,但每个孩子只有一对父母一个道理,是一对多的关系。
图:比线性表和树都要复杂,节点之间关系是任意的,图中任意两个数据元素之间都可能相关。
树可以看成是连通的没有回路的图,可看做一种特殊图。其实线性表可以看成是一种特殊的树。
线性表中我们把数据元素叫做元素,树中将数据元素叫做结点,在图中数据元素,我们则称之为顶点(Vertex)。
线性表中可以没有数据元素,称为空表。树中可以没有结点,叫做空树。在图结构中,不允许没有顶点,但边可以为空。因此在图的定义中强调有穷非空。
线性表中,相邻数据元素之间具有线性关系,树结构中,相邻两层结点之间有层次关系,而图中,任意两个顶点之间都有可能有关系,顶点之间的逻辑关系用边来表示,边集可以为空的。
7.2.1各种图定义
无向边:若顶点Vi到Vj之间的边没有方向,则称这条边为无向边(Edge),用无序偶对(Vi,Vj)来表示。
无向图:如果图中任意两个顶点之间的边都是无向边,则称该图为无向图。由于是无方向的,连接顶点A和连接顶点D的边,可以表示成无序对(A,D),也可以表示成(D,A)。
对于上面的无向图G来说,G=(V,E),其中顶点集合V={A,B,C,D};边集合E={(A,B),(B,C),(C,D),(A,C),(A,D)}
有向边:若同顶点Vi到Vj的边有方向,则称这条边为有向边,也称为弧(Arc)。用有序偶<Vi,Vj>来表示,Vi称为弧尾,Vj称为弧头。
有向图:如果任意两个顶点之间的边都是有向边,则称该图为有向图。
对于上面的有向图,连接顶点A和B的有向边就是弧,A是弧尾,B是弧头,<A,D>表示弧,不能写成<D,A>。G = (V,E);其中顶点集合V={A,B,C,D};弧集合E={<A,B>,<B,C>,<C,D>,<D,A>,<C,A>}。
注意:无向边用小括号“()”来表示,有向边用尖括号“<>”来表示。
简单图:在图中,若不存在顶点到其自身的边,且同一条边不重复出现,则称这样的图为简单图。我们课程里讨论的图都是简单图。
完全无向图:如果任意两个顶点之间都存在边,则称该图为完全无向图。含有n个顶点的无向完全图有n*(n-1)/2条边。
完全有向图:如果任意两个顶点之间都存在方向互为相反的两条弧,则称该图为有向完全图。含有n个顶点的完全有向图有n*(n-1)条边。
从上面可以得到结论,对于具有n个顶点和e条边的图,无向图0 <= e <= n*(n-1)/2。有向图0 <= e <= n*(n-1)。
稀疏图:有很少条边或弧的图,反之称为稠密图。
权(Weight):与图的边或弧相关的数叫做权。权可以表示从一个顶点到另一个顶点之间的距离或耗费。
网:带权的图。
子图:假设有两个图G=(V,E),G1=(V1,E1),如果V1包含于V且E1包含于E,则称G1为G的子图(Subgraph)。
7.2.2图的顶点与边间关系
1、无向图
对于无向图G=(V,E)。如果边(V,V1)属于E,则称顶点V和V1互为邻接点,即V和V1相邻接。
顶点的度:顶点V的度是和V向关联的边的数目。
边的数目是各顶点度数的和的一半。
2、有向图
对于有向图G=(V,E)。如果弧<V,V1>属于E,则称顶点V邻接到顶点V1,顶点V1邻接自顶点V。弧<V,V1>和顶点V,V1相关联。
弧的入度:以顶点V为头的弧的数目称为V的入度。
弧的出度:以顶点V为尾的弧的数目称为V的出度。
边的数目 = 各顶点的入度和 = 各顶点的出度和。
路径:顶点V到顶点V1所经过的顶点序列(如:V―V2―V3―V1)
树中根节点到任意节点的路径是唯一的。但是图中顶点与顶点之间的路径却不是唯一的,有可能不存在路径。
路径的长度:路径上的边或弧的数目。
回路或环:第一个顶点和最后一个顶点相同的路径称为回路或环(Cycle)。
简单路径:序列中顶点不重复出现的路径称为简单路径。
简单回路:除了第一个顶点和最后一个顶点之外,其余顶点不重复出现的回路,称为简单回路或简单环。
7.2.3连通图的相关术语
在无向图中,如果从顶点V到顶点V1有路径,则称V和V1是连通的。如果对于图中任意两个顶点Vi、Vj,Vi和Vj都是连通的,则称G是连通图。
连通分量:无向图中的极大连通子图。注意连通分量的概念,它强调:
(1)要是子图。
(2)子图要是连通的。
(3)连通子图含有极大顶点数(再多一个顶点就不在连通了)
(4)具有极大顶点树的连通子图包含依附于这些顶点的所有边。
结论:(1)非连通图应该至少有两个连通分量。
在有向图中,如果对于每一对Vi、Vj,Vi不等于Vj,从Vi到Vj和从Vj到Vi都存在路径,则称G是强连通图。
有向图中的极大强连通子图称作有向图的强连通分量。
生成树:一个连通图的生成树是一个极小的连通子图,它包含图中全部的n个顶点,但只有足以构成一棵树的n-1条边。
有向树:如果一个有向图恰有一个顶点入度为0,其余顶点的入度为1,则是一棵有向树。所谓入度为0就是相当于树中的根节点,其余顶点入度为1就是说树的非根节点的双亲只有一个。
生成森林:一个有向图的生成森林由若干棵有向树组成,含有图中全部节点,但只有足以构成若干棵互不相交的有向树的弧。