Cod sursa(job #2049716)

Utilizator DianaVelciovVelciov Diana DianaVelciov Data 27 octombrie 2017 16:22:40
Problema Algoritmul lui Dijkstra Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.11 kb
#include <fstream>
#include <vector>

using namespace std;

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

const int N_MAX = 50005;
const int oo = 2000000000;
int N, M, D[N_MAX];
bool S[N_MAX];
vector <pair <int, int> > G[N_MAX];

void Dijkstra(){
    for (int i = 2;i <= N; ++i)
        D[i] = oo;
    for (int k = 1; k < N; ++k){
        int minim = oo, Nod, cost;
        for (int j = 1; j <= N; ++j)
            if (D[j] <= minim && S[j] == 0){
                minim = D[j];
                Nod = j;
            }
        S[Nod] = 1;
        for (int i = 0; i < (int)G[Nod].size(); ++i){
            int vecin = G[Nod][i].first, cost = G[Nod][i].second;
            D[vecin] = min (D[vecin], D[Nod] + cost);
        }
    }
}

int main(){
    in >> N >> M;
    for (int i = 1; i <= M; ++i){
        int x, y, z; in >> x >> y >> z;
        G[x].push_back(make_pair(y, z));
    }
    Dijkstra();
    for (int i = 2; i <= N; ++i)
        if (D[i])
            out << D[i] << " ";
        else out << "0" << " ";
    out << '\n';
    in.close(); out.close();
    return 0;
}