为什么这代码没输出
  • 板块灌水区
  • 楼主StrFaith
  • 当前回复13
  • 已保存回复13
  • 发布时间2023/10/18 13:17
  • 上次更新2023/11/2 13:06:06
查看原帖
为什么这代码没输出
970752
StrFaith楼主2023/10/18 13:17
#include <bits/stdc++.h>
using namespace std;
int n, m ,s;
const int maxn = 2e5+1;
const int INF = 2147483647;
int head[maxn << 1];
int cnt = 0;
struct edge
{
    int u, v, w, nxt;
}edge[maxn];
long long d[maxn];
bool done[maxn];
struct node{
    int id, dis;
    node(int a, int b) {
        id = a; dis = b;
    }
    bool operator < (const node &a) const {
        return dis > a.dis;
    }
};
void addedge(int a, int b ,int c) {
    edge[cnt].u = a;
    edge[cnt].v = b;
    edge[cnt].w = c;
    edge[cnt].nxt = head[a];
    head[a] = cnt++;
}
void init() {
    for(int i = 0; i < m; i++){
        edge[i].nxt = -1;
    }
    for(int i = 0; i < n; i++)
        head[i] = -1;
}

void dijk(int s) {
    for(int i = 0; i< n; i++) {d[i] = INF; done[i] = 0;}
    d[s] = 0;
    priority_queue <node> g;
    g.push(node(s, 0));
    while(!g.empty()) {
        node u = g.top();
        g.pop();
        if(done[u.id])continue;
        done[u.id] = 1;
        for(int i = head[u.id]; ~i; i = edge[i].nxt) {
            int x= edge[i].v;
            if(done[x]) continue;
            if(d[x] > u.dis + edge[i].w) {
                d[x] = u.dis + edge[i].w;
                g.push(node(x, d[x]));
            }
        }
    }
}
int main() {
    //freopen("a.in", "r", stdin);
    //freopen("a.out", "w", stdout);
    init();
    scanf("%d%d%d", &n, &m, &s);
    for(int i = 0; i< m; i++) {
        int a, b, c;
        scanf("%d%d%d", &a, &b, &c);
        addedge(a, b, c);

    }
    dijk(s);
    for(int i = 1; i< n; i++)
        printf("%lld ", d[i]);
    return 0;
}

求解释

2023/10/18 13:17
加载中...