chenfy27的刷题记录

导航

luoguB3647 Floyd最短路

给出一张由n个点m条边组成的无向图,求所有点对(i,j)之间的最短路。
n<=100; m<=4500; 1<=w<=1000

多源最短路模板题,注意循环顺序是kij,另外可能会有重边,因此两点之间的距离要初始化为inf,读入边权时取最小值。

#include <bits/stdc++.h>
using i64 = long long;

const int inf = 1000000000;
int d[105][105];
void solve() {
    int n, m;
    std::cin >> n >> m;
    for (int i = 1; i <= n; i++) {
        for (int j = 1; j <= n; j++) {
            d[i][j] = i==j ? 0 : inf;
        }
    }
    for (int i = 1; i <= m; i++) {
        int u, v, w;
        std::cin >> u >> v >> w;
        d[u][v] = d[v][u] = std::min(d[u][v], w);
    }
    for (int k = 1; k <= n; k++) {
        for (int i = 1; i <= n; i++) {
            for (int j = 1; j <= n; j++) {
                d[i][j] = std::min(d[i][j], d[i][k] + d[k][j]);
            }
        }
    }
    for (int i = 1; i <= n; i++) {
        for (int j = 1; j <= n; j++) {
            std::cout << d[i][j] << " ";
        }
        std::cout << "\n";
    }
}

int main() {
    std::cin.tie(0)->sync_with_stdio(0);
    int t = 1;
    while (t--) solve();
    return 0;
}

posted on 2024-03-23 11:15  chenfy27  阅读(25)  评论(0)    收藏  举报