Skip to content

图论理论基础

图的概念

0个以上的节点及节点之间边构成了图。0个节点就是空图。

图的种类

有向图:边有方向

无向图:边无方向

加权有向图

加权无向图

属于节点的概念。

无向图中有几条边连接该节点,该节点就有几度。

在有向图中,每个节点有出度和入度。

出度:从该节点出发的边的个数。

入度:指向该节点边的个数。

连通性

连通图

无向图中,任意两个节点都可到达,为连通图。

如果有节点不能到达其他节点,则为非连通图。

强连通图

有向图中,任意两个节点都可相互到达,为强连通图。

连通分量

无向图中的极大连通子图称之为该图的一个连通分量。

强连通分量

有向图中的极大强连通子图称之为该图的强连通分量。

图的构造

朴素存储

把所有边存下来,也就是把边的两个节点存下来,因为两个节点就能代表一条边。因此可以用数组,也可以用map,或者类,都能表示这种边的关系。

优点:直观。

缺点:但如果我们想知道两个节点是否相连,我们就需要把存储空间都枚举一遍才行。

同时,我们在深搜和广搜的时候,都不会使用这种存储方式。

邻接表

使用数组+链表的方式。从变得数量来表示图, 有多少边就有多大链表。

img

有多少边 邻接表才会申请多少个对应的链表节点。

邻接矩阵

使用二维数组表示图结构。从节点的角度表示图,多少个节点就多大的二维数组。

隐患:在 边少,节点多的情况下,会导致申请过大的二维数组,造成空间浪费

优点:表达简单、检查两个节点之间的连通情况非常快、适合稠密图

缺点:不适合稀疏图

图的遍历方式

深搜和广搜,支持不同的数据结构。二叉树章节我们已见识过。