Cod sursa(job #871370)

Utilizator cernat.catallinFMI Cernat Catalin Stefan cernat.catallin Data 4 februarie 2013 19:29:14
Problema Algoritmul lui Dijkstra Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.3 kb
#include <fstream>
#include <iostream>
#include <vector>
#include <queue>
using namespace std;

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

#define inf 500000000

struct nod_g{
    int nod, cost;
};

vector < vector<nod_g> > graf;
vector <unsigned int> cost;
int n, m, s = 1;
nod_g temp;

void citire(){
    f >> n >> m;
    graf.resize(n+1);
    int x, y, c;
    for(int i = 1; i <= m; ++i){
        f >> x >> y >> c;
        temp.nod = y; temp.cost = c;
        graf[x].push_back(temp);
    }
    f.close();
}

void dijkstra(){
    queue<int> coada;
    vector<nod_g>::iterator it;
    int primul = s;
    cost.resize(n+1, inf);
    cost[s] = 0;
    coada.push(s);

    while(!coada.empty()){
        for(it = graf[primul].begin(); it != graf[primul].end(); ++it){
            if(cost[it->nod] > cost[primul] + it->cost){
                coada.push(it->nod);
                cost[it->nod] = cost[primul] + it->cost;
            }
        }
        coada.pop();
        primul = coada.front();
    }
}

void afisare(){
    for(int i = 1; i <= n; ++i){
        if(i == s) continue;
        if(cost[i] == inf) g << "0 ";
        else g << cost[i] << " ";
    }
    g.close();
}

int main(){
    citire();
    dijkstra();
    afisare();

    return 0;
}