邻接矩阵用 $n\times n$ 二维数组表示 n 个顶点间的邻接关系。无权图:$A[i][j]=1$ 若 $(v_i,v_j)\in E$,否则 0。带权图(网):$A[i][j]=w_{ij}$ 有边、$\infty$ 无边、对角 0。
#define MaxVertexNum 100
typedef struct {
char Vex[MaxVertexNum]; // 顶点表
int Edge[MaxVertexNum][MaxVertexNum]; // 邻接矩阵
int vexnum, arcnum; // 顶点数、边数
} MGraph;
| 性质 | 说明 |
|---|---|
| 空间复杂度 | O(n²),与边数无关 |
| 求度 | 无向图:行之和=度;有向图:行之和=出度、列之和=入度 |
| 判断边存在 | O(1) 直接查表 |
| 适用稠密图 | 边数接近 n² 时空间利用率高 |
| 适用稀疏图 | 大量 0 浪费空间,不如邻接表 |
| 无向图对称性 | $A[i][j] = A[j][i]$ |
$A^k$ 中 $A^k[i][j]$ 表示从顶点 $i$ 到顶点 $j$ 长度为 k 的路径数,用于求两点间特定长度的路径数目。
| 考法 | 解题套路 |
|---|---|
| 写出邻接矩阵 | 根据边集填 0/1 矩阵 |
| 从矩阵求度 | 行之和(出度)+ 列之和(入度) |
| 求路径数 | $A^k[i][j]=$ 长度为 k 的路径数 |
| 选存储 | 稀疏→邻接表,稠密→邻接矩阵 |
| 判断边 | O(1) 直接查 $A[i][j]$ |
↑ 以上为站内 HTML 相对链接(纯网页可浏览);本页右上「在 Obsidian 中打开」跳回源笔记。