图论相关定义
一个图(graph) G = (V, E) 由顶点(vertex)的集合 V 和 边(edge)的集合E组成,有时也把边称作弧(arc)。如果图中的边是带方向的,那么图就是有向图(directed),否则就是无向图。如果有一条边从顶点v到顶点w,则称顶点v和w邻接(adjacent)。如果图中有一条从一个顶点到它自身的边,那么图是带环的,无向图中的环意义不大(无向图中很容易出现还),当我们讨论图中的环时,通常是针对有向图中的环,比如常见的有向无环图(DAG, Directed Acyclic Graph)。对于图的边,有时会赋予其权值(weight),例如用权值表示从从一个城市(顶点v)到另一个城市(顶点w)的距离。
如果一个无向图中从每一个顶点到其他每个顶点都存在一条路径,则称该无向图是连通的(connected)。具有这样性质的有向图称为是强连通的(strongly connected),如果一个有向图不是强连通的,但是去掉其边上的方向后形成的图是连通的,则称该有向图是弱连通的(weakly connected)。完全图(complete graph)是其每一对顶点间都存在一条边的图。
图的表示
图的常用表示法有:邻接表表示法、邻接矩阵表示法。
直接上图:
分别用上述两种表示法表示上图如下:
邻接表在表示稀疏图(边的条数|E|远远小于 ∣ V ∣ 2 |V|^2 ∣V∣2的图)时非常紧凑而成为通常的选择,在表示稠密图(边的条数|E|接近于 ∣ V ∣ 2 |V|^2 ∣V∣2的图)时,更倾向于使用邻接矩阵。另外,对于权重图,我们可以在邻接矩阵中表示各个边的权值,而不仅仅是用0或者1表示两个顶点之间是否有边。
以上就是图论算法基础简单介绍,该系列后面会介绍相关具体图论算法。