数据结构之图

图(Graph)是比树还要难以理解和学习的“多对多”数据结构,可以认为树也是图的一种。图的知识点众多,按照存储路径的方向分,可分为无向图和有向图,按照图的存储结构分,可分为完全图与有向完全图、连通图与强连通图、连通分量与强连通分量、无环图与有向无环图,其涉及的算法则包括克鲁斯卡尔算法、普里姆算法、迪杰斯特拉算法和弗洛伊德算法等。如下图所示为图的分类。
数据结构之图_第1张图片

与表和树相同,图虽然有“多对多”的逻辑关系,但同样可以使用顺序存储和链式存储有效地保存数据元素:与表和树不同的是,图的顺序存储需要两个数组(包含一个二维教组),链式存储则包括邻接表、邻接多重表和十字链表等。
与表和树不同,图中存储的数据元素不叫节点,我们称其为顶点;若两个顶点直接相连,则称它们互为邻接点:两个顶点及它们中间途径的所有顶点组成的序列称为路径;用字母V表示图中顶点的集合, V R V_R VR表示图中顶点之间关系的集合。

注意:如果路径的始末点相同,则该路径为“回路”或“环”。

按存储路径方向分类

按存储路径的方向,图分为单向图和双向图。单向/双向图的区别就是看路径上有没有箭头,无箭头(双向)的图为无向图,有箭头(单向)的图为有向图。如下图所示为单向/双向图的分类。
数据结构之图_第2张图片

1.无向图

在无向图中(如下图所示),相连的两个顶点互相建立联系,顶点的集合可表示为 V = { V 1 , V 2 , V 3 , V 4 , V 5 , V 6 , V 7 } V=\{V1,V2,V3,V4,V5,V6,V7\} V={V1,V2,V3,V4,V5,V6,V7}顶点关系的集合可表示为 V R = { ( V 1 , V 2 ) , ( V 1 , V 3 ) , ( V 2 , V 4 ) , ( V 2 , V 5 ) , ( V 4 , V 5 ) , ( V 3 , V 6 ) ( V 3 , V 7 ) , ( V 6 , V 7 ) } V_R=\{ (V1,V2),(V1,V3),(V2,V4),(V2,V5),(V4,V5),(V3,V6)(V3,V7),(V6,V7) \} VR={(V1,V2),(V1,V3),(V2,V4),(V2,V5),(V4,V5),(V3,V6)(V3,V7),(V6,V7)}
数据结构之图_第3张图片

2. 有向图

在有向图中(如下图所示),箭头出发的顶点称为“初始点”或“弧尾”,箭头指向的顶点称为“终端点”或“弧头”,指向某一顶点的箭头数称为该顶点的“入度”(InDegree,项点V的入度可表示为 ID(V)),离开某一顶点的箭头数称为该顶点的“出度”(OutDegree,顶点V的出度可表示为 OD(V))。
数据结构之图_第4张图片
和无向图不同,在有向图中,各个项点之同的关系是“单向”的。在无向图中,用(V1,V2)表示两个顶点间的二元关系,并将其称为“边”:在有向图中,用<V1,V2>表示两个顶点间的二元关系,并将其称为“弧”。

按存储结构分类

除了无向图和有向图之外,根据图的存储结构,图又可分为完全图与有向完全图、连通图与强连通图、连通分量与强连通分量、无环图与有向无环图,如下图所示。
数据结构之图_第5张图片

1. 完全图与有向完全图

完全图指各顶点与其他顶点均有联系的无向图,满足该条件的有向图即为有向完全图,如下图所示。
数据结构之图_第6张图片
数据结构之图_第7张图片
一定要分清的是:具有n个顶点的完全图拥有 n ( n − 1 ) 2 \frac{n(n-1)}{2} 2n(n1)条边,具有n个顶点的有向完全图拥有n(n-1)条弧。

2.连通图与强连通图

如果图的两个顶点之间至少存在一条路径,则称这两个顶点是连通的。如果无向图中的任意两个顶点都是连通的,则称其为连通图。同理,满足该条件的有向图即为强连通图。如下图所示为连通图与强连通图。
数据结构之图_第8张图片
数据结构之图_第9张图片
显而易见,完全图一定是连通图,而有向完全图一定是强连通图。

3. 连通分量与强连通分量

如果无向图不是连通图,但其最大连通子图符合连通图的定义,则称该子图为连通外量。同理,满足该条件的有问图即为强连通分量。如下图所示为连通分量与强连通分量示意图。
数据结构之图_第10张图片
数据结构之图_第11张图片

注意:连通分量的前提是其必须是非连通图。

4. 无环图与有向无环图

无环图就容易理解了,没有回路(环)的无向图都为无环图。同理,满足该条件的有向图即为有向无环图。如下图所示为无环图与有向无环图。

数据结构之图_第12张图片
数据结构之图_第13张图片

你可能感兴趣的:(数据结构,图,无环图与有向无环图,按存储路径方向分类,按存储结构分类)