邻接矩阵是一种用于表示图中顶点间相邻关系的矩阵。具体来说,邻接矩阵是一个二维数组,其大小为 n x n,其中 n 是图中顶点的数量。矩阵中的每个元素表示对应顶点之间是否存在一条边:
如果存在一条边连接顶点 i 和顶点 j,则邻接矩阵中位置 M[i][j] 和 M[j][i] 的值都为 1。
如果不存在边连接顶点 i 和顶点 j,则这两个位置的值都为 0。
邻接矩阵的特点如下:
1. 对于无向图,邻接矩阵是对称的,即 M[i][j] = M[j][i]。
2. 对于有向图,邻接矩阵不一定对称。
3. 在无向图中,主对角线上的元素(M[i][i])通常为 0,因为顶点不与自身相连。
4. 邻接矩阵可以用来快速判断图中任意两个顶点之间是否存在边,以及计算顶点的度(出度和入度)。
邻接矩阵的空间复杂度为 O(n^2),但由于无向图的邻接矩阵具有对称性,实际上只需要存储上三角或下三角的数据,因此空间复杂度可以优化为 O(n^2/2) 或 O(n(n-1)/2)。
需要注意的是,邻接矩阵在表示图时,每条边会被表示两次,一次在矩阵的左上角到右下角的对角线方向,另一次在右上角到左下角的对角线方向。因此,如果图中边的数量为 E,邻接矩阵中 1 的个数将是 2E