#4614. 弗洛伊德(Floyd-Warshall)算法练习2
弗洛伊德(Floyd-Warshall)算法练习2
【题目描述】
给定一个有 个节点的无向图,节点编号为 ,图中有 条带权边,边权为正整数()。请使用 Floyd-Warshall 算法完成以下任务:
- 计算任意两点之间的最短路径长度;
- 额外输出一个 的矩阵,标记两点之间是否存在路径(存在输出
1,不存在输出0,自身到自身输出1); - 若两点间无路径,最短路径长度输出
-1。
【输入格式】
第一行:两个整数 (,) 接下来 行:每行三个整数 ,表示节点 和 之间有一条无向边,边权为
【输出格式】
第 1 ~ 行:每行 个整数,为任意两点的最短路径长度矩阵 第 行:空行(分隔两个矩阵) 第 ~ 行:每行 个整数,为任意两点的路径存在性矩阵
每一行的最后1个数字后无空格
【样例输入】
3 3
1 2 1
2 3 2
1 3 5
【样例输出】
0 1 3
1 0 2
3 2 0
1 1 1
1 1 1
1 1 1
【练习要点】
- 掌握无向图的处理(边 双向赋值,
dist[u][v] = dist[v][u] = w) - 学会新增辅助矩阵(路径存在性矩阵),并在 Floyd 过程中同步更新
- 理解无向图中“可达性”的传递性(若 可达 , 可达 ,则 可达 )