Cod sursa(job #2409732)

Utilizator osiaccrCristian Osiac osiaccr Data 19 aprilie 2019 12:56:35
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.16 kb
#include <fstream>
#include <set>
#include <vector>
#define DEF 110
#define INF 1 << 29

using namespace std;

ifstream fin ("dijkstra.in");
ofstream fout ("dijkstra.out");

int n, p, D[DEF];

vector < pair < int, int > >  L[DEF];

set < pair < int, int > > S;

int main () {
    fin >> n >> p;

    int x, y, c;
    while (fin >> x >> y >> c) {
        L[x].push_back ({y, c});
    }

    for (int i = 0; i <= n; ++ i) {
        D[i] = INF;
    }

    D[p] = 0;
    S.insert ({0, p});

    while (!S.empty ()) {
        int currNod = S.begin () -> second;
        S.erase (S.begin ());
        for (int i = 0; i < L[currNod].size (); ++ i) {
            int vecin = L[currNod][i].first;
            int dist = L[currNod][i].second;
            if (D[vecin] > D[currNod] + dist) {
                S.erase ({D[vecin], vecin});
                D[vecin] = D[currNod] + dist;
                S.insert ({D[vecin], vecin});
            }
        }
    }

    for (int i = 1; i <= n; ++ i) {
        if (D[i] == INF) {
            fout << "-1 ";
        }
        else {
            fout << D[i] << " ";
        }
    }

    return 0;
}