#4596. 弗洛伊德(Floyd-Warshall)最短路
弗洛伊德(Floyd-Warshall)最短路
题目描述
给定一个有 n 个顶点(顶点编号为 1~n)的有向图(允许存在重边和自环),图中共有 m 条带权边,边的权值为非负整数(范围 0~1000)。
请你使用弗洛伊德算法,计算出任意两个顶点之间的最短路径长度。若两个顶点之间不存在可达路径,输出 -1。
输入格式
- 第一行输入两个整数
n和m(1 ≤ n ≤ 100,1 ≤ m ≤ 10000),分别表示顶点数和边数; - 接下来
m行,每行输入三个整数u、v、w,表示存在一条从顶点u指向顶点v的有向边,边的权值为w; - 顶点编号保证为
1~n范围内的整数。
输出格式
输出 n 行,每行输出 n 个整数,第 i 行第 j 列的整数表示从顶点 i 到顶点 j 的最短路径长度。若 i 无法到达 j,输出 -1。
输入样例
4 5
1 2 3
1 3 6
2 3 2
2 4 5
3 4 1
输出样例
0 3 5 6
-1 0 2 3
-1 -1 0 1
-1 -1 -1 0
样例解释
- 顶点
1到顶点4的最短路径为1→2→3→4,总权值3+2+1=6; - 顶点
2到顶点4的最短路径为2→3→4,总权值2+1=3; - 顶点
3无法到达顶点1、2,故对应位置输出-1。
