在无向图中,任意两个顶点之间的连接是双向的,即如果顶点i与顶点j之间存在一条边,那么顶点j与顶点i之间也存在同一条边。这种双向性在邻接矩阵中通过矩阵的对称性来表示。
对于包含n个顶点的无向图,其邻接矩阵A是一个n x n的二维数组(或矩阵),其中: 1、如果顶点i与顶点j之间存在边,则A[i][j] = 1(或者,如果图是有权图,则A[i][j]等于该边的权重)。 2、如果顶点i与顶点j之间不存在边,则A[i][j] = 0。 3、由于无向图的性质,邻接矩阵A是对称的,即A[i][j] = A[j][i]。
然而,在实际存储时,我们只需要存储矩阵的上三角(包括对角线)或下三角部分,因为另一半是重复的。但出于简化和直观性的考虑,在表示无向图时,我们通常会完整地表示整个矩阵,包括其对称部分。
示例
假设有一个无向图G,包含4个顶点(编号从0到3),边集为{(0, 1), (1, 2), (2, 3), (0, 3)},其邻接矩阵如下:
0 1 0 1
1 0 1 0
0 1 0 1
1 0 1 0
这个邻接矩阵表示:
顶点0与顶点1、顶点3相连。 顶点1与顶点0、顶点2相连。 顶点2与顶点1、顶点3相连。 顶点3与顶点0、顶点2相连。 注意,矩阵的每一对对称元素(如A[0][1]和A[1][0])都是相同的,这反映了无向图的性质。但在实际编程或表示时,我们通常会完整地写出整个矩阵,而不是只写一半。这样做的好处是简化了访问和修改矩阵元素的逻辑,尽管它会导致一些空间上的浪费。然而,对于大多数实际应用来说,这种空间浪费是可以接受的,因为邻接矩阵的空间复杂度O(n^2)通常不是性能瓶颈。