Cod sursa(job #1808802)

Utilizator eusebiu_gageaGagea Eusebiu-Andrei eusebiu_gagea Data 18 noiembrie 2016 09:52:51
Problema Algoritmul lui Dijkstra Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.14 kb
#include <fstream>
using namespace std;
ifstream f("dijkstra.in");
ofstream g("dijkstra.out");

#define inf 1000000000
int n, m, p, a[10001][10001], viz[50001], d[50001], pred[50001];

int main()
{
    bool gata;
    int i, j, x, y, c, nr, dmin, im;
    f>>n>>m; p = 1;
    for(i = 1; i < n; i++)
        for(j = i + 1; j <= n; j++)
            a[i][j] = a[j][i] = inf;
    while(f>>x>>y>>c)
        a[x][y] = c;
    for(i = 1; i <= n; i++) {
        pred[i] = p;
        d[i] = a[p][i];
    }
    viz[p] = 1;
    nr = 1;
    do {
        gata = true;
        dmin = inf;
        for(i = 1; i <= n; i++)
            if(!viz[i] && d[i] < dmin) {
                dmin = d[i];
                im = i;
            }
        if(dmin != inf) {
            viz[im] = 1; gata = false; nr++;
            for(i = 1; i <= n; i++)
                if(!viz[i] && d[im] + a[im][i] < d[i]) {
                    d[i] = d[im] + a[im][i];
                    pred[i] = im;
                }
        }
    }while(nr < n && !gata);
    for(i = 2; i <= n; i++) {
        if(d[i] == inf) d[i] = -1;
        g<<d[i]<<' ';
    }
    return 0;
}