Cod sursa(job #2036380)

Utilizator osiaccrCristian Osiac osiaccr Data 10 octombrie 2017 17:15:36
Problema Algoritmul lui Dijkstra Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 1.19 kb
#include <fstream>
#include <vector>
#define DEF 50001
#define INF 2147483646

using namespace std;

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

int n, m, d[DEF], v[DEF];

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

int main () {
    fin >> n >> m;
    for (int i = 1; i <= m; i++) {
        int x, y, z;
        fin >> x >> y >> z;
        L[x].push_back (make_pair (y, z));
    }

    for (int i = 2; i <= n; i++) {
        d[i] = INF;
    }

    for (int i = 1; i <= n; i++) {
        int Min = INF + 1, nod;
        for (int j = 1; j <= n; j++) {
            if (d[j] < Min && v[j] == 0) {
                Min = d[j];
                nod = j;
            }
        }
        v[nod] = 1;
        for (vector < pair <int, int> >::iterator it = L[nod].begin (); it != L[nod].end (); it++) {
            int vecin = it -> first,
                cost = it -> second;
            if (v[vecin] == 0 && d[vecin] > d[nod] + cost) {
                d[vecin] = d[nod] + cost;
            }
        }
    }

    for (int i = 2; i <= n; i++) {
        if (d[i] == INF)
            fout << "0 ";
        else
            fout << d[i] << " ";
    }

    return 0;
}