Cod sursa(job #1095044)

Utilizator StexanIarca Stefan Stexan Data 30 ianuarie 2014 11:54:44
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.25 kb
#include <fstream>
#include <vector>

#define NMAX 50010

using namespace std;

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] = 2000000000;
    }
}

void Read(){
    f>>N>>M;
    for (int i = 1; i <= M; i++) {
        /*
         x,y - nodurile intre care avem legaturi
         c - cost
         */
        
        int x,y,c; f>>x>>y>>c;
        G[x].push_back(make_pair(y, c));
    }
}

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

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

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