Cod sursa(job #1373286)

Utilizator StexanIarca Stefan Stexan Data 4 martie 2015 17:51:03
Problema Algoritmul lui Dijkstra Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.21 kb
#include <fstream>
#include <vector>

#define NMAX 50010

using namespace std;

const int oo = 2000000000;

int Distance[NMAX],N,M;
bool Selected[NMAX];

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

vector< pair<int, int> > G[NMAX];

void init(){
    for (int i = 2; i <= N; i++) {
        Distance[i] = oo;
    }
}

void Read(){
    f>>N>>M;
    int x,y,c;
    for (int i = 1; i <= M; i++) {
        f>>x>>y>>c;
        G[x].push_back(make_pair(y, c));
    }
}

void Dijkstra(){
    for (int i = 1 ; i <= N; i++) {
        int Nod,Min = oo;
        for (int j = 1; j <= N; j++) {
            if (Distance[j] < Min && Selected[j] == false) {
                Min = Distance[j];
                Nod = j;
            }
        }
        Selected[Nod] = true;
        for (int k = 0; k < G[Nod].size(); k++) {
            int Vecin = G[Nod][k].first, Cost = G[Nod][k].second;
            Distance[Vecin] = min(Distance[Vecin], Distance[Nod] + Cost);
        }
    }
}

void Write(){
    for (int i = 2; i <= N; i++) {
        if (Distance[i] == 2000000000) {
            g<<0<<" ";
        }else{
            g<<Distance[i]<<" ";
        }
    }
}

int main()
{
    Read();
    init();
    Dijkstra();
    Write();
    
    return 0;
}