#4615. 弗洛伊德(Floyd-Warshall)算法练习1

弗洛伊德(Floyd-Warshall)算法练习1

【题目描述】

给定一个有 nn 个节点的有向图,节点编号为 1n1 \sim n,图中有 mm 条带权边(无重边),边权可以为负整数(1000w1000-1000 \le w \le 1000),且图中不存在负权环(即不存在从某个节点出发,回到自身的路径总权值为负)。请使用 Floyd-Warshall 算法计算任意两点之间的最短路径长度,若两点之间不存在可达路径,输出 -1

【输入格式】

第一行:两个整数 n,mn, m1n2001 \le n \le 2000mn×n0 \le m \le n \times n) 接下来 mm 行:每行三个整数 u,v,wu, v, w,表示有一条从节点 uu 指向节点 vv 的有向边,边权为 ww

【输出格式】

nn 行,每行 nn 个整数,第 ii 行第 jj 个数表示从节点 ii 到节点 jj 的最短路径长度(按要求输出 -1 或具体数值)

【样例输入】

4 6
1 2 3
1 3 8
1 4 -4
2 4 1
2 3 4
3 2 -5

【样例输出】

0 2 6 -4 
-1 -1 3 -1 
-1 -6 -2 -6 
-1 -1 -1 0 

【练习要点】

  1. 掌握含负权边(无负权环)的 Floyd 算法处理(核心松弛逻辑不变,注意 INF 的选择避免溢出)
  2. 理解负权边对最短路径的影响,验证松弛操作的有效性
  3. 强化对“不可达”状态的判断(避免负权边导致 INF 被错误更新)