在这篇文章中,我将介绍一些跟图有关的进阶术语,以及图的两种遍历方式,即DFS(深度优先搜索)和BFS(广度优先搜索)。对于文中使用的一些图的术语,可以读算法导论随笔(七):图(Graph)的表示(附Python实现源码)复习一下。首先让我们来看看连通图的概念。
1. 图的连通性
在一个无向图G中,对于两个顶点u和v,若u和v之间有路径,则称u与v是连通的。如果图中任意两点都是连通的,那么图被称作连通图。
如果G是有向图,那么连接u和v的路径中所有的边都必须同向。
这种任意两个点都相同的特性叫做连通性。连通图具有连通性。
子图的概念:对于图G,其子图S具有如下属性:S的顶点集合是G的顶点集合的子集;S的边的集合是G的边的集合的子集。若S的顶点集合是G的顶点集合的真子集,且S的边的集合是G的边的集合的真子集,则称S是G的真子图。
极大子图:若P是G的子图,而且P不是G的任何其他的子图的真子图,则P是G的极大子图。
连通分量:若一个图G的极大子图P是连通图,则P是G的连通分量。对于一个连通图来说,它的连通分量为其自身;对于非连通图来说,它可能有多个连通分量。
例如下面的图,它不是连通图,因此有两个连通分量,分别用红色和蓝色标出。
接着,让我们来看看一个进阶概念。
2.双连通图
在了解双连通图(Biconnected Graph)的概念之前,让我们先了解一下分离边(separation edges)和分离顶点(Separation vertices)的概念。
首先,在一个图中,若删除一个顶点及与该顶点相邻的边会把这个图分裂为两个互不相连的图(也就是破坏了其连通性),则该顶点称为分离顶点。
类似地,在一个图中,若删除一条边会导致这个图被分裂为两个互不相连的图,则该边称为分离边。
例如下图中,顶点LGA,DFW和LAX是三个分离顶点,而红色的这条边是一条分离边。