Cod sursa(job #1519373)

Utilizator dex4Darjan Catalin dex4 Data 7 noiembrie 2015 11:47:14
Problema Algoritmul lui Dijkstra Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.13 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
#define nmax 50005
#define mmax 250005
#define inf 1<<30

using namespace std;

int m, n, d[nmax];
vector < pair<int, int> > T[nmax];
queue < pair<int, int> > Q;

void read(){
    int x, y, cost;
    ifstream f("dijkstra.in");
    f >> n >> m;
    for(int i=1; i<=m; i++){
        f >> x >> y >> cost;
        T[x].push_back(make_pair(y, cost));
    }
}

int dijkstra(){
    int nod, v = 0, w = 0;
    while(!Q.empty()){
        nod = Q.front().first;
        Q.pop();
        for(int i=0; i<T[nod].size(); i++){
            v = T[nod][i].first;
            w = T[nod][i].second;
            if(d[v] > d[nod] + w){
                d[v] = d[nod] + w;
                Q.push(make_pair(v, d[v]));
            }
        }
    }
}

int main()
{
    read();
    d[1] = 0;
    for(int i=2; i<=n; i++)
        d[i] = inf;
    Q.push(make_pair(1, d[1]));
    dijkstra();
    ofstream g("dijkstra.out");
    for(int i=2; i<=n; i++)
        if(d[i] != inf)
            g << d[i] << " ";
        else
            g << 0 << " ";
    return 0;
}