数据结构——第六章 图

[知识框架]

数据结构——第六章 图_第1张图片

主要掌握深度优先搜索和广度优先搜索,图的基本概念及基本性质、图的存储结构(邻接矩阵、邻接表、邻接多重表和十字链表)及其特性、存储结构之间的转化、基于存储结构上的遍历操作和各种应用(拓扑排序、最小生成树、最短路径和关键路径)等。通常要求掌握基本思想和实现步骤(手动模拟)。

6.1 图的基本概念

6.1.1 图的定义

G G G 由顶点集 V V V 和边集 E E E 组成,记为 G = ( V , E ) G=(V, E) G=(V,E)

其中 V ( G ) V(G) V(G) 表示图 G G G 中顶点的有限非空集;

E ( G ) E(G) E(G) 表示图 G G G 中顶点之间的关系(边)集合。

V = { v 1 , v 2 , ⋯   , v n } V=\left\{v_{1}, v_{2}, \cdots, v_{n}\right\} V={ v1,v2,,vn}, 则用 表 ∣ V ∣ |V| V 示图 G G G 中顶点的个 数,也称图 G G G 的阶,

E = { ( u , v ) ∣ u ∈ V , v ∈ V } E=\{(u, v) \mid u \in V, v \in V\} E={ (u,v)uV,vV}, 用 ∣ E ∣ |E| E 表示图 G G G 中边的条数。

注意:线性表可以是空表,树可以是空树,但图不能是空图。图中不能一个顶点也没有,图的顶点集V一定非空,但边集E可以为空,此时图中只有顶点没有边。
  1. 有向图

E E E 是有向边(也称弧)的有限集合时,则图 G G G 为有向图。

弧是顶点的有序对,记为 < v , w > <v,w>, 其中 v , w v, w v,w 是顶点, v v v 称为弧尾, w w w 称为弧头, < v , w > <v,w> 称为从顶点 v v v 到顶点 w w w 的弧,也称 v v v 邻接到 w w w,或 w w w 邻接自 v v v
( a ) (\mathrm{a}) (a) 所示的有向图 G 1 G_{1} G1 可表示为
G 1 = ( V 1 , E 1 ) V 1 = { 1 , 2 , 3 } E 1 = { < 1 , 2 > , < 2 , 1 > , < 2 , 3 > } \begin{array}{c} G_{1}=\left(V_{1}, E_{1}\right) \\ V_{1}=\{1,2,3\} \\ E_{1}=\{<1,2>,<2,1>,<2,3>\} \end{array} G1=(V1,E1)V1={ 1,2,3}E1={ <1,2>,<2,1>,<2,3>}

  1. 无向图

E E E 是无向边(简称边)的有限集合时,则图 G G G 为无向图。

边是顶点的无序对,记为 ( v , w ) (v, w) (v,w) ( w , v ) (w, v) (w,v), 因为 ( v , w ) = ( w , v ) (v, w)=(w, v) (v,w)=(w,v), 其中 v , w v, w v,w 是顶点。

可以说顶点 w w w 和顶点 v v v 互为邻接点。边 ( v , w ) (v, w) (v,w) 依附于顶点 w w w v v v ,或者说边 ( v , w ) (v, w) (v,w) 和顶点 v , w v, w v,w 相关联。

(   b ) (\mathrm{~b}) ( b) 所示的无向图 G 2 G_{2} G2 可表示为
G 2 = ( V 2 , E 2 ) V 2 = { 1 , 2 , 3 , 4 } E 2 = { ( 1 , 2 ) , ( 1 , 3 ) , ( 1 , 4 ) , ( 2 , 3 ) , ( 2 , 4 ) , ( 3 , 4 ) } \begin{array}{c} G_{2}=\left(V_{2}, E_{2}\right) \\ V_{2}=\{1,2,3,4\} \\ E_{2}=\{(1,2),(1,3),(1,4),(2,3),(2,4),(3,4)\} \end{array} G2=(V2,E2)V2={ 1,2,3,4}E2={ (1,2),(1,3),(1,4),(2,3),(2,4),(3,4)}

有向边用<>表示,无向边用()表示。

  1. 简单图

一个图 G G G 若满足:

(1) 不存在重复边;

(2) 不存在顶点到自身的边,则称图 G G G 为简单图。

图中 G 1 G_{1} G1 G 2 G_{2} G2 均为简单图。数据结构中仅讨论简单图。

  1. 多重图

若图 G G G 中某两个结点之间的边数多于一条,又允许顶点通过同一条边和自己关联,则 G G G 为多重图。多重图的定义和简单图是相对的。

  1. 完全图(也称简单完全图)

对于无向图, ∣ E ∣ |E| E 的取值范围是 0 到 n ( n − 1 ) / 2 n(n-1) / 2 n(n1)/2, 有 n ( n − 1 ) / 2 n(n-1) / 2 n(n1)/2 条边的无向图称为完全图,在完全图中任意两个顶点之间都存在边。

对于有向图, ∣ E ∣ |E| E 的取值范围是 0 到 n ( n − 1 ) n(n-1) n(n1), 有 n ( n − 1 ) n(n-1) n(n1) 条弧 的有向图称为有向完全图,在有向完全图中任意两个顶点之间都存在方向相反的两条弧。图中 G 2 为无向完全图,而  G 3 G2{\text {为无向完全图,而 }} G{3} G2为无向完全图,而 G3 为有向完全图。

  1. 子图

设有两个图 G = ( V , E ) G=(V, E) G=(V,E) G ′ = ( V ′ , E ′ ) G^{\prime}=\left(V^{\prime}, E^{\prime}\right) G=(V,E), 若 V ′ V^{\prime} V V V V 的子集,且 E ′ E^{\prime} E E E E 的子集,则称 G ′ G^{\prime} G G G G 的子图。

若有满足 V ( G ′ ) = V ( G ) V\left(G^{\prime}\right)=V(G) V(G)=V(G) 的子图 G ′ G^{\prime} G, 则称其为 G G G 的生成子图。图中 G 3 G_{3} G3 G 1 G_{1} G1 的子图。

注意: 并非 V V V E E E 的任何子集都能构成 G G G 的子图, 因为这样的子集可能不是图,即 E E E 的子集中的某些边关联的顶点可能不在这个 V V V 的子集中。

  1. 连通、连通图和连通分量

在无向图中,若从顶点 v v v 到顶点 w w w 有路径存在,则称 v v v w w w 是连通的。

若图 G G G 中任意两个顶点都是连通的,则称图 G G G 为连通图,否则称为非连通图。

无向图中的极大连通子图称为连通分量。

若一个图有 n n n 个顶点,并且边数小于 n − 1 n-1 n1, 则此图必是非连通图。如图 (a)所示,图 G 4 G_{4} G4 有 3 个连通分量,如图 (b)所示。

数据结构——第六章 图_第2张图片

连通分量强调:

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

注意: 极大连通子图是无向图的连通分量,极大即要求该连通子图包含其所有的边;

​ 极小连通子图是既要保持图连通又要使得边数最少的子图。

  1. 强连通图、强连通分量

在有向图中,若从顶点 v v v 到顶点 w w w 和从顶点 w w w 到顶点 v v v 之间都有路径,则称这两个顶点是强连通的。

若图中任何一对顶点都是强连通的,则称此图为强连通图。

有向图中的极大强连通子图称为有向图的强连通分量,图 G 1 G_{1} G1 的强连通分量如图所示。

注意:强连通图、强连通分量只是针对有向图而言的。一般在无向图中讨论连通性,在有向图中考虑强连通性。

  1. 生成树、生成森林

**连通图的生成树是包含图中全部顶点的一个极小连通子图。**若图中顶点数为 n n n, 则它的生成树含有 n − 1 n-1 n1 条边。

对生成树而言,若砍去它的一条边,则会变成非连通图,若加上一条边则会形成一个回路。

在非连通图中, 连通分量的生成树构成了非连通图的生成森林。图 G 2 G_{2} G2 的一个生成树:

注意:包含无向图中全部顶点的极小连通子图,只有生成树满足条件,因为砍去生成树的任一条边,图将不再连通。

  1. 顶点的度、入度和出度

图中每个顶点的度定义为以该顶点为一个端点的边的数目。

对于无向图,顶点 v v v 的度是指依附于该顶点的边的条数,记为 T D ( v ) \mathrm{TD}(v) TD(v)

具有 n n n 个顶点、 e e e 条边的无向图中, ∑ i = 1 n T D ( v i ) = 2 e \sum_{i=1}^{n} \mathrm{TD}\left(v_{i}\right)=2 e i=1nTD(vi)=2e,

无向图的全部顶点的度的和等于边数的 2 倍,因为每条边和两个顶点相关联。

对于有向图, 顶点 v v v 的度分为入度和出度,

入度是以顶点 v v v 为终点的有向边的数目,记为 I D ( v ) ; \mathrm{ID}(v) ; ID(v);

而出度是以顶点 v v v 为起点的有向边的数目,记为 O D ( v ) \mathrm{OD}(v) OD(v)

顶点 v v v 的度等于其入度和出度之和,即 T D ( v ) = I D ( v ) + O D ( v ) \mathrm{TD}(v)=\mathrm{ID}(v)+\mathrm{OD}(v) TD(v)=ID(v)+OD(v)

在具有 n n n 个顶点、 e e e 条边的有向图中, ∑ i = 1 n I D ( v i ) = ∑ i = 1 n O D ( v i ) = e \sum_{i=1}^{n} \mathrm{ID}\left(v_{i}\right)=\sum_{i=1}^{n} \mathrm{OD}\left(v_{i}\right)=e i=1nID(vi)=i=1nOD(vi)=e,

有向图的全部顶点的入度之和与出度之和相等,并且等于边数。这是因为每条有向边都有一个起点和终点。

  1. 边的权和网

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

  1. 稠密图、稀疏图

**边数很少的图称为稀疏图,反之称为稠密图。**稀疏和稠密本身是模糊的概念,稀疏图和稠密图常常是相对而言的。

一般当图 G G G 满足 ∣ E ∣ < ∣ V ∣ log ⁡ ∣ |E|<|V| \log \mid E<Vlog V|时,可以将 G G G 视为稀疏图。

  1. 路径、路径长度和回路

顶点 v p v_{p} vp 到顶点 v q v_{q} vq 之间的一条路径是指顶点序列 v p , v i 1 , v i 2 , ⋯   , v i m , v q v_{p}, v_{i_{1}}, v_{i_{2}}, \cdots, v_{i_{m}}, v_{q} vp,vi1,vi2,,vim,vq, 关联的边也可以理解为路径的构成要素。

路径上边的数目称为路径长度

第一个顶点和最后一个顶点相同的路径称为回路或环。若一个图有 n n n 个顶点,并且有大于 n − 1 n-1 n1 条边,则此图一定有环。

  1. 简单路径、简单回路

在路径序列中,顶点不重复出现的路径称为简单路径

除第一个顶点和最后一个顶点外,其余顶点不重复出现的回路称为简单回路

  1. 距离

从顶点 u u u 出发到顶点 v v v最短路径若存在,则此路径的长度称为从 u u u v v v距离

若从 u u u v v v 根本不存在路径,则记该距离为无穷 ( ∞ ) (\infty) ()

  1. 有向树

一个顶点的入度为 0 、其余顶点的入度均为 1 的有向图,称为有向树。

6.2 图的存储和基本操作

6.2.1 邻接矩阵法

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

结点数为 n n n 的图 G = ( V , E ) G=(V, E) G=(V,E) 的邻接矩阵 A A A n × n n \times n n×n 的。将 G G G 的顶点编号为 v 1 , v 2 , ⋯   , v n v_{1}, v_{2}, \cdots, v_{n } v1,v2,,vn。若 ( v i , v j ) ∈ E \left(v_{i}, v_{j}\right) \in E (vi,vj)E, 则 A [ i ] [ j ] = 1 A[i][j]=1 A[i][j]=1, 否则 A [ i ] [ j ] = 0 A[i][j]=0 A[i][j]=0
A [ i ] [ j ] = { 1 ,  若  ( v i , v j ) 或 < v i , v j >  是  E ( G ) 中 的 边 0 ,  若  ( v i , v j ) 或 < v i , v j >  不是  E ( G )  中的边  A[i][j]=\left\{\begin{array}{ll} 1, & \text { 若 }\left(v_{i}, v_{j}\right) \text 或\text { 是 } E(G) 中 的 边 \\ 0, & \text { 若 }\left(v_{i}, v_{j}\right) \text 或\text { 不是 } E(G) \text { 中的边 } \end{array}\right. A[i][j]={ 1,0,  (vi,vj)<vi,vj>  E(G)  (vi,vj)<vi,vj> 不是 E(G) 

你可能感兴趣的:(数据结构,数据结构)