Cod sursa(job #3151689)

Utilizator Alex_DumitrascuAlex Dumitrascu Alex_Dumitrascu Data 22 septembrie 2023 16:40:19
Problema Algoritmul lui Dijkstra Scor 20
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.31 kb
#include <bits/stdc++.h>

using namespace std;

int len[50005];
bool known[50005];

struct nod
{
    int n, c;
    nod(int a, int b)
    {
        n=a; c=b;
    }

};

vector <nod> v[50005];

int n;

void dijkstra()
{
    for (int q=1; q<=n; q++) {
        int MINI_DIST=INT_MAX, MINI_NOD=-1;
        for (int i=1; i<=n; i++) {
            if (known[i]==0) {
                if (len[i]<MINI_DIST||MINI_NOD==-1) {
                    MINI_DIST=len[i];
                    MINI_NOD=i;
                }
            }
        }

        if (MINI_DIST==INT_MAX) break;
        known[MINI_NOD]=1;


        for (nod nd : v[MINI_NOD]) {
            if (known[nd.n]==1) continue;
            if (len[MINI_NOD]+nd.c<len[nd.n]) {
                len[nd.n]=len[MINI_NOD]+nd.c;
            }
        }
    }
}

int main()
{
    freopen("dijkstra.in", "r", stdin);
    freopen("dijkstra.out", "w", stdout);

    int p;
    cin>>n>>p;
    int i, j, c;
    for (int i=1; i<=p; i++) {
        cin>>i>>j>>c;
        v[i].push_back(nod(j, c));
    }
    for (int i=1; i<=n; i++) {
        len[i]=INT_MAX;
        known[i]=0;
    }
    len[1]=0;
    dijkstra();
    for (int i=2; i<=n; i++) {
        if (len[i]==INT_MAX) cout<<"0 ";
        else cout<<len[i]<<" ";
    }
    return 0;
}