Cod sursa(job #1806062)

Utilizator serbanSlincu Serban serban Data 14 noiembrie 2016 19:56:33
Problema Algoritmul lui Dijkstra Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.17 kb
#include <fstream>
#include <vector>
#define oo 1<<30

using namespace std;

vector< pair<int, int> > L[50005];
int d[50005], t[50005];
bool viz[50005];

int main()
{
    ifstream f("dijkstra.in");
    ofstream g("dijkstra.out");

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

    for(int i = 2; i <= n; i ++)
        d[i] = oo;

    for(int i = 1; i <= n; i ++) {

        int mn = oo, poz = 0;
        for(int j = 1; j <= n; j ++) {
            if(!viz[j] && d[j] < mn) {
                mn = d[j];
                poz = j;
            }
        }
        if(poz) {

            viz[poz] = true;
            for(int j = 0; j < L[poz].size(); j ++) {
                int nod = L[poz][j].first;
                int cost = L[poz][j].second;

                if(d[nod] > d[poz] + cost) {
                    d[nod] = d[poz] + cost;
                    t[nod] = poz;
                }
            }

        }
    }

    for(int i = 2; i <= n; i ++)
        if(d[i] == oo) g << "0 ";
        else g << d[i] << " ";
    g << "\n";
    return 0;
}