1 条题解

  • 0
    @ 2024-11-6 8:52:39
    #include <bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    const int N = 55 + 1, INF = 0x3f3f3f3f, MOD = 1E9 + 7;
    int n, m, g[N][N], dis[N], st[N];
    
    void dijkstra(int s) {
        memset(dis, 0x3f, sizeof dis);
        dis[s] = 0;
        for (int i = 1; i <= n; i++) {
            int u = -1;
            for (int j = 1; j <= n; j++)
                if (!st[j] && (u == -1 || dis[u] > dis[j]))
                    u = j;
            st[u] = 1;
            for (int j = 1; j <= n; j++)
                dis[j] = min(dis[j], dis[u] + g[u][j]);
        }
    }
    int main(int argc, char* argv[]) {
        int s, w;
        cin >> n >> s;
        for (int i = 1; i <= n; i++)
            for (int j = 1; j <= n; j++) {
                cin >> w;
                g[i][j] = (w == 0 ? INF : w);
            }
    
        dijkstra(s);  // s->all 单源最短路
        for (int i = 1; i <= n; i++) {
            if (dis[i] == INF)
                dis[i] = -1;
            if (i != s)
                cout << dis[i] << " \n"[i == n];
        }
        return 0;
    }
    
    • 1

    信息

    ID
    583
    时间
    1000ms
    内存
    32MiB
    难度
    1
    标签
    递交数
    134
    已通过
    91
    上传者