Cod sursa(job #2539164)

Utilizator Yato2Denis Scutariu Yato2 Data 5 februarie 2020 18:34:23
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.15 kb
#include <fstream>
#define INFINITE 1000000
using namespace std;

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

int n, node_start, x, y, val, mat[50001][50001], viz[50001], d[50001];

void dijkstra(int p) {

    for(int i = 1; i <= n; ++i) {
        d[i] = mat[p][i];
    }
    d[0] = INFINITE;
    viz[p] = 1;
    for(int k = 1; k < n; ++k) {
        int pmax = 0;
        for(int i = 1; i <= n; ++i)
            if(!viz[i] && d[i] < d[pmax])
                pmax = i;
        if(pmax > -1) {
            viz[pmax] = 1;
            for(int i = 1; i <= n; ++i)
                if(!viz[i] && d[i] > d[pmax] + mat[pmax][i])
                    d[i] = d[pmax] + mat[pmax][i];
        }
    }

    for(int i = 1; i <= n; ++i)
        if(d[i] == INFINITE)
            out << -1 << ' ';
        else 
            out << d[i] << ' ';

}

int main() {

    in >> n >> node_start;
    for(int i = 1; i <= n; ++i){
        for(int j = 1; j <= n; ++j)
            mat[i][j] = INFINITE;
        mat[i][i] = 0;
    }
    while(in >> x >> y >> val) {
        mat[x][y] = val;
    }

    dijkstra(node_start);


    return 0;
}