dij+链式前向星 样例过不去 求助!!!
查看原帖
dij+链式前向星 样例过不去 求助!!!
731239
RTX7070Ti楼主2023/4/11 21:01

第一次写链式前向星,结果连样例都过不去 输出0 2147483647 2147483647 2147483647

#include <iostream>
using namespace std;
const int INF = 0x7fffffff;

int n, m, u, v, w, mind, now, start, cnt = 1;
int head[100001], dis[100001], vis[100001];
struct Edge{
    int next, to, w;
}edge[100001];
void add(int u, int v, int w){
    edge[cnt].w = w;
    edge[cnt].to = v;
    edge[cnt].next = head[u];
    head[u] = cnt++;
}
void dijkstra(int start){
    for (int i = 1; i <= n; i++){
        dis[i] = INF;
        head[i] = -1;
        vis[i] = 0;
    }
    dis[start] = 0;

    for (int i = 1; i <= n - 1; i++){
        mind = INF;
        for (int j = 1; j <= n; j++){
            if (vis[j] == 0 && dis[j] < mind){
                mind = dis[j];
                now = j;
            }
        }
        vis[now] = 1;
        int b = head[now];
        while (b != -1){
            int a = edge[b].to;
            if (dis[a] > dis[now] + edge[b].w) dis[a] = dis[now] + edge[b].w;
            b = edge[b].next;
        }
    }
}
int main(){
    cin >> n >> m >> start;

    for (int i = 1; i <= m; i++){
        cin >> u >> v >> w;
        add(u, v, w);
    }

    dijkstra(start);

    for (int i = 1; i <= n; i++){
        cout << dis[i] << " ";
    }

    return 0;
}
2023/4/11 21:01
加载中...