图的定义及表示

图、无向图与有向图

图是由顶点和边组成的集合,其中每条边连接两个顶点。通常用 G=(V, E) 表示图,其中 V 表示顶点集合,E 表示边集合。图的大小表示为 n = |V|m = |E|

无向图中,每条边连接的两个顶点是一致的。而有向图中,每条边都是一个有序对,边 e=(u, v)uv 的地位是不能交换的。

图的表示

邻接矩阵

n * n 矩阵 A 表示一个图,其中 A[u][v] = 1 表示 (u, v) 是一条边,反之则不构成一条边。注意这里说的图是无权重图,对于有权重的图,用 A[u][v] = infinity 表示不构成一条边。

图的邻接矩阵表示

图的邻接矩阵表示

邻接链表

n 个链表来表示,每个链表存储的都是所有与该结点连接的结点。

图的邻接链表表示

图的邻接链表表示

优缺点分析

邻接矩阵的好处是可以在常数时间内判断两个顶点是否有边,缺点是如果图是稀疏的,此时的存储是十分不高效的 (Θ(n^2))。

邻接链表在存储更加高效 (Θ(m+n)),尤其是在查找与某个结点相邻的结点时。但邻接链表判断两个顶点是否有边会比较麻烦 (O(degree(u)))。

图的各种算法中,一般使用图的邻接链表表示,但 Floyd-Warshall 算法使用邻接矩阵。

常用术语