您的位置: 网站首页 > 程序开发 > 数据结构 > 第6章 图 > 【6.1 图的基本概念】

6.1 图的基本概念

 

图作为一种非线性数据结构,被广泛应用于多个技术领域,诸如系统工程、化学分斩、统计力学、遗传学、控制论、人工智能、编译系统等领域,在这些技术领域中把图结构作为解决问题的数学手段之一。在离散数学中侧重于对图的理论进行系统的研究。在本章中,主要是应用图论的理论知识来讨论如何在计算机上表示和处理图,以及如何利用图来解决一些实际问题。

在图中,数据元素之间是多对多关系,因此图用于表达数据元素之间存在着的复杂关系,这种关系称为网状结构关系。实际上,前面讨论的线性表和树都可看成是简单的图。本章介绍图的基本概念、存储结构和相关算法的实现过程。

本章主要内容

&        图的定义、特性和相关的概念

&        图的存储结构

&        图的遍历算法

&        最小生成树的算法

&        图最短距离的算法和拓扑排序方法

&        图关键路径的求法

6.1  图的基本概念

图结构与表结构和树结构的不同表现在节点之间的关系上,线性表中节点之间的关系是一对一的,即每个节点仅有一个前驱和一个后继(若存在前驱或后继时);树是按分层关系组织的结构,树结构中节点之间的关系是一对多,即一个双亲可以有多个孩于,每个孩子节点仅有一个双亲;对于图结构,图中顶点之间的关系可以是多对多,即一顶点和其他顶点间的关系是任意的,可以有关也可以无关。图是一种比较复杂的非线性数据结构。

6.1.1  图的定义

图是由一个非空的顶点集合和一个描述顶点之间关系即边(或者弧)的集合组成,它可以形式化地定义为:

G=(V,E)

V={vi | vi?VertexType }

E={<vi,vj> | vi,vj?VP(vi,vj) }

其中,G表示一个图;V是图G中的顶点集合;EV中顶点偶对的有限集。这些顶点偶对也称为边,VertexType是用于描述顶点的类型,类似于以前使用的ElemType,集合EP(vi,vj)的含义是:对于有向图P(vi,vj)表示顶点vi和顶点vj之间存在一条从vivj的边,通常用<vi,vj>表示;对于无向图P(vi,vj)表示顶点vi和顶点vj之间存在一条从vivj的边和一条从vjvi的边,通常用(vi,vj)表示。

通常,V(G)E(G)分别表示图G的顶点集合和边集合。E(G)也可以为空集。若E(G)为空,则图G只有顶点而没有边。

【例6-1有一个图G1=(V1,E1),其中:

V1={0,1,2,3,4}

E1={(0,1),(1,2),(2,3),(3,4),(2,4),(0,3)}

有另一个图G2=(V2,E2),其中:

V2={0,1,2,3,4}

E2={<0,1>,<1,2>,<1,3>,<2,4>,<0,4>,<4,3>,<3,2>}

画出这两个图的逻辑结构。

解:它们的逻辑结构如图6-1所示,从中看到图G1是无向图,图G2是有向图。

6-1  G1G2的逻辑结构

6.1.2  图的基本术语

·    顶点(Vertex):6-2中的圆圈称为顶点。

·    边(Edge):6-2中的每个顶点之间的连线称为边。

·    无向图(Undirected Graph):在边上没有箭头的图称为无向图,如图6-2G1G2为无向图。

·    有向图(Directed Graph):在边上有箭头的图称为有向图,如图6-2G3为有向图。

·    图(Graph):图是由所有顶点和所有边组合而成的,以G=(V,E)表示。在无向图中(V1,V2)(V2,V1)代表相同的边,但在有向图中<V2,V1><V1,V2>是不一样的边。在有向图中的<V1,V2>V1表示边的弧头(Head)而V2表示边的弧尾(Tail)。

在图6-2中,V(G1)={1,2,3,4}E(G1)={(1,2),(1,3),(1,4),(2,3),(2,4),(3,4)}V(G2)={1,2,3,4, 5,6,7}E(G2)={(1,2),(1,3),(2,4),(2,5),(3,6),(3,7)}V(G3)={1,2,3}E(G3)={<1,2>,<2,3>,<3,2>}

6-2  图结构示意图

·    多重图(Mutigraph):假如两个顶点有多条相同的边,则称之为多重图,而不是图形。如图6-2中的G4

·    完全图(Complete Graph):n个顶点的无向图中,假如有n(n-1)/2个边,则这样的图称为完全图。如图6-2中的G1是完全图,其余都不是(因为G14(4-1)/2=6个边)。

·    邻接(Adjacent):在图的某一边(V1,V2)中,称顶点V1与顶点V2是邻接的,但在有向图中称<V1,V2>V1是邻接到V2V2邻接自V1

·    依附(Incident):在图6-2中,顶点V1和顶点V2是邻接的,而边(V1,V2)依附在顶点V1与顶点V2上。可以发现在G3中依附在顶点V2的边有<1,2><2,3><3,2>

·    子图(Subgraph):假设V(G') V(G)E(G') E(G),则称G'G的子图。如图6-3是图6-2G1的部分子图,图6-4是图6-2G3的部分子图。

a          b                c          d

6-3  6-2G1的部分子图

a        b        c          d

6-4  6-2G3的部分子图

·    路径(Path):在图G中,从顶点Vp到顶点Vq的路径是指一系列的顶点VpVi1Vi2、…、VinVq,其中(Vp,Vi1)(Vi1,Vi2)、…、(Vin,Vq)E(G)上的边。假如G'是有向图,则<Vp,Vi1><Vi1,Vi2>、…、<Vin,Vq>E(G')上的边,故一条路径是由一个或一个以上的边所组成的。

·    长度(Length):一条路径上的长度是指该路径上所有边的数目。

·    简单路径(Simple Path):除头尾顶点之外,其余顶点都在不相同的路径上。如图6-2中,G1的两条路径12431242,其长度都为3,但前者是简单路径,而后者不是简单路径。

·    回路或环(Cycle):回路或环是指第一个顶点和最后一个顶点相同的简单路径,如图6-2中,G11231G3121

·    连通(Connected):在一个图G中,如果有一条路径从V1V2,那么就说V1V2是连通的。如果V(G)中的每一对不同的顶点ViVj都有一条由ViVj的路径,则称该图是连通的。如图6-5中的G5不是连通的(因为G1G2无法连接起来)。

6-5  G5示意图

·    连通分量(Connected Component):或称分量(Component)是指该图中最大的连通子图(Maximal Connected Subgraph),如图6-5中的G5有两个分量G1G2

6-6  G3的强连通分量

 

·    强连通(Strongly Connected):在一个有向图中,如果V(G)中的每一对不同顶点ViVj各有一条从ViVj及从VjVi的有向路径,则称此有向图是强连通的。图6-2中的G3不是强连通,因为G3没有V2V1的路径。

·    强连通分量(Strongly Connected Component):是指一个强连通最大子图。图6-2G3有两个强连通分量,如图6-6所示。

·    度(Degree):依附在顶点的边数。如图6-2G1的顶点1度为3。若为有向图,则其度为入度与出度之和。

·    入度(In-degree):顶点V的入度是指以V为终点(即箭头指向V)的边数,如图6-2G3顶点2的入度为2,而顶点3的入度为1

·    出度(Out-degree):顶点V的出度是以V为起点的边数,如图6-2G3中顶点2的出度为1,而顶点13的出度为1