洛谷B3647 【模板】Floyd 题解 floyd算法 求 多源多汇最短路

floyd主要解决的问题:

  1. 多源多汇最短路:https://www.cnblogs.com/quanjun/p/17928959.html
  2. 传递闭包:https://www.cnblogs.com/quanjun/p/17928980.html
  3. 最小环:https://www.cnblogs.com/quanjun/p/12934659.html
  4. floyd+倍增:求经过恰好k条边的最短路

题目链接:https://www.luogu.com.cn/problem/B3647

floyd算法:https://oi-wiki.org/graph/shortest-path/#floyd-算法

示例程序:

#include <bits/stdc++.h>
using namespace std;
const int maxn = 101;
int n, m, f[maxn][maxn];

int main() {
    scanf("%d%d", &n, &m);
    memset(f, 0x3f, sizeof f);
    for (int i = 1; i <= n; i++)
        f[i][i] = 0;
    for (int i = 0; i < m; i++) {
        int u, v, w;
        scanf("%d%d%d", &u, &v, &w);
        f[u][v] = f[v][u] = w;
    }
    for (int k = 1; k <= n; k++)
        for (int i = 1; i <= n; i++)
            for (int j = 1; j <= n; j++)
                f[i][j] = min(f[i][j], f[i][k] + f[k][j]);
    for (int i = 1; i <= n; i++) {
        for (int j = 1; j <= n; j++) {
            if (j > 1) putchar(' ');
            printf("%d", f[i][j]);
        }
        puts("");
    }
    return 0;
}
posted @ 2023-12-26 17:52  quanjun  阅读(53)  评论(0编辑  收藏  举报