# 背景
给定一个 个点 条边的有向图,图中可能存在 重边 和 自环,边权可能为负数
再给定 个询问,每个询问包含两个整数 和 ,表示查询从点 到点 的最短距离,如果路径不存在,就输出 impossible
# 思路
本质上是动态规划,通过三层循环分别枚举中间点、起点、终点,暴力求解
利用二维数组存图d[起点][终点] = min(d[起点][终点], d[起点][中间点] + d[中间点][终点]
理解较容易,代码如下
1 | void floyd() { |
给定一个 个点 条边的有向图,图中可能存在 重边 和 自环,边权可能为负数
再给定 个询问,每个询问包含两个整数 和 ,表示查询从点 到点 的最短距离,如果路径不存在,就输出 impossible
本质上是动态规划,通过三层循环分别枚举中间点、起点、终点,暴力求解
利用二维数组存图d[起点][终点] = min(d[起点][终点], d[起点][中间点] + d[中间点][终点]
理解较容易,代码如下
1 | void floyd() { |