什么是邻接矩阵?

推荐答案

邻接矩阵是一种用于表示图的二维数组。对于一个有 ( n ) 个顶点的图,邻接矩阵是一个 ( n \times n ) 的矩阵,其中矩阵的元素 ( A[i][j] ) 表示顶点 ( i ) 和顶点 ( j ) 之间是否存在边。如果存在边,则 ( A[i][j] ) 为 1(或边的权重),否则为 0。

本题详细解读

邻接矩阵的定义

邻接矩阵是图的一种存储方式,特别适用于稠密图(即边数接近顶点数平方的图)。对于一个有 ( n ) 个顶点的图,邻接矩阵是一个 ( n \times n ) 的矩阵。矩阵的行和列分别代表图中的顶点,矩阵中的值表示顶点之间是否存在边。

邻接矩阵的表示

  • 无向图:对于无向图,邻接矩阵是对称的。如果顶点 ( i ) 和顶点 ( j ) 之间存在边,则 ( A[i][j] = A[j][i] = 1 )。
  • 有向图:对于有向图,邻接矩阵不一定对称。如果存在从顶点 ( i ) 到顶点 ( j ) 的边,则 ( A[i][j] = 1 ),而 ( A[j][i] ) 不一定为 1。
  • 带权图:对于带权图,矩阵中的值可以表示边的权重,而不是简单的 0 或 1。

邻接矩阵的优缺点

优点

  1. 简单直观:邻接矩阵的表示方式非常直观,容易理解和实现。
  2. 快速查询:可以在 ( O(1) ) 时间内判断两个顶点之间是否存在边。
  3. 适合稠密图:对于边数接近顶点数平方的图,邻接矩阵的空间利用率较高。

缺点

  1. 空间复杂度高:对于稀疏图(即边数远小于顶点数平方的图),邻接矩阵会浪费大量空间。
  2. 插入和删除操作较慢:在邻接矩阵中插入或删除边需要 ( O(1) ) 时间,但插入或删除顶点需要 ( O(n^2) ) 时间。

邻接矩阵的应用

邻接矩阵常用于图的算法中,如最短路径算法(如 Floyd-Warshall 算法)、图的连通性判断等。由于其简单性和快速查询的特点,邻接矩阵在某些场景下是非常有效的。

代码示例

以下是一个简单的邻接矩阵的代码示例(以无向图为例):

-- -------------------- ---- -------
- ---- --- -----
- - -
---------- - ---- - - --- - -- ---------

- ---
---------------- - -
---------------- - -
---------------- - -
---------------- - -
---------------- - -
---------------- - -

- ------
--- --- -- -----------
    ----------

输出结果:

纠错
反馈