二维数组表示图的路径矩阵核心是用n×n数组存储顶点间可达性、距离或路径信息,典型应用包括:一、邻接矩阵,存直接连接关系与权值;二、Floyd算法的Dist矩阵,存全源最短距离;三、Path矩阵,存最短路径前驱顶点以还原路径;四、动态规划中的dp矩阵,表征网格中路径数或最小代价。

用二维数组表示图的路径矩阵,核心是把图中任意两个顶点之间的可达性、距离或路径信息,存进一个 n × n 的数组里(n 是顶点数)。这种表示法最典型的应用场景就是邻接矩阵和最短路径矩阵(如 Floyd 算法输出的 Dist 和 Path)。
一、邻接矩阵:记录直接连接关系
这是最基础的二维路径矩阵。
-
graph[i][j]表示从顶点i到顶点j是否有边,以及边的权重。 - 若无向图且无权:通常用
1表示连通,0表示不连通。 - 若带权图:存权值(如
graph[2][5] = 6表示从顶点 2 到顶点 5 的边权为 6);不可达位置常设为∞或-1。 - 对于无向图,矩阵关于主对角线对称;有向图则不一定。
注意:
- 初始化时,
graph[i][i] = 0(自己到自己距离为 0); - 其余
graph[i][j]根据输入边逐个赋值; - 空间复杂度固定为
O(n²),适合顶点不多或图较稠密的情况。
二、最短路径距离矩阵(如 Floyd 输出的 Dist)
它不是原始输入,而是算法运行后生成的“全源最短路径结果”。
-
Dist[i][j]表示从顶点i到顶点j的最短路径长度; - 初始值等于邻接矩阵(不可达设为极大值,如
INT_MAX); - 经过
k从0到n−1的三重循环更新后,Dist[i][j]收敛为最终最短距离; - 更新逻辑:
if (Dist[i][j] > Dist[i][k] + Dist[k][j]) Dist[i][j] = Dist[i][k] + Dist[k][j]。
这个矩阵本身不显式存路径,但能快速查任意两点最短距离。
三、最短路径前驱矩阵(Path 矩阵)
配合 Dist 使用,用于还原具体路径。
-
Path[i][j]存的是从i到j的最短路径中,j的上一个顶点编号(即前驱); - 初始化时,若
i→j直接连通,则Path[i][j] = i;否则设为-1; - 更新
Dist[i][j]时,若经k更优,则同步更新Path[i][j] = Path[k][j](或直接记k,视实现而定); - 还原路径可用递归或栈:从
j往回找Path[i][j] → Path[i][prev] → ... → i。
例如:Path[0][5] = 4,Path[4][5] = 3,Path[3][5] = -1,说明路径是 0 → 4 → 3 → 5。
四、路径存在性/数量矩阵(动态规划类)
在网格路径问题中,二维数组也常表示“到达某位置的方案数”或“最小代价”。
- 如
dp[i][j]表示从(0,0)走到(i,j)的路径总数(只能右/下); - 或表示最小路径和:
dp[i][j] = min(dp[i−1][j], dp[i][j−1]) + grid[i][j]; - 边界初始化关键:第一行/列往往只有一种走法;
- 本质仍是路径信息的二维承载,只是语义从“图结构”转向“状态空间”。
这类矩阵不描述图本身,而是建模问题中的路径状态演化。

















