1 条题解

  • 0
    @ 2025-7-1 15:14:02
    #include <bits/stdc++.h>
    using namespace std;
    
    int n,s;
    int a[55][55];
    int dis[55];
    int vis[55];
    
    struct Node {
        int u, d;
        bool operator < (const Node &other) const {
            return d > other.d;
        }
    };
    
    
    void dijkstra() {
        priority_queue<Node> q;
        // 把dis中的每一个数都置成0x3f3f3f3f
        memset(dis,0x3f,sizeof(dis));
        q.push({s, 0});
        dis[s] = 0;
        while (!q.empty()) {
            Node cur = q.top();
            q.pop();
            int u = cur.u;
            if (vis[u]) {
                continue;
            }
            vis[u] = 1;
    
            for (int v = 1; v <= n; v++) {
                if (a[u][v] == 0) {
                    continue;
                }
    
                int ndis = dis[u] + a[u][v];
                if (ndis < dis[v]) {
                    dis[v] = ndis;
                    q.push({v, ndis});
                }
            }
        }
    
    }
    
    int main() {
        cin >> n >> s;
        for (int i = 1; i <= n; i++) {
            for (int j = 1; j <= n; j++) {
                cin >> a[i][j];
            }
        }
    
        dijkstra();
    
        for (int i = 1; i <= n; i++) {
            if (i == s) {
                continue;
            }
            if (dis[i] == 0x3f3f3f3f) {
                cout << -1 << " ";
                continue;
            }
            cout << dis[i] << " ";
        }
    
        return 0;
    }
    
    
    

    信息

    ID
    2367
    时间
    1000ms
    内存
    32MiB
    难度
    6
    标签
    递交数
    28
    已通过
    10
    上传者