Cod sursa(job #1243336)

Utilizator muresan_bogdanMuresan Bogdan muresan_bogdan Data 15 octombrie 2014 20:17:27
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.33 kb
#include<iostream>
#include<fstream>
#include<vector>
#include<queue>
using namespace std;

ifstream fin("dijsktra.in");
ofstream fout("dijsktra.out");

struct cuplu{
    int id, cost;
};

struct nod {
    bool vizitat;
    int cost;
    vector<cuplu> vecini;
};

int n, m, i, a, b, c;
nod graf[50001];
queue<int> coada;

void viziteaza(int x) {
    vector<cuplu>::iterator it;
    for(it = graf[x].vecini.begin(); it < graf[x].vecini.end(); it++) {
        cuplu vecin = *it;
        if(!graf[vecin.id].vizitat) {
            graf[vecin.id].vizitat = true;
            graf[vecin.id].cost = graf[x].cost + vecin.cost;
            coada.push(vecin.id);
        }
        else {
            if(graf[vecin.id].cost > graf[x].cost + vecin.cost) {
                graf[vecin.id].cost = graf[x].cost + vecin.cost;
                coada.push(vecin.id);
            }
        }
    }
}

int main() {
    fin >> n >> m;
    for(i = 0; i < m; i++) {
        fin >> a >> b >> c;
        cuplu nou;
        nou.id = b;
        nou.cost = c;
        graf[a].vecini.push_back(nou);
    }
    coada.push(1);
    graf[1].vizitat = true;
    while(!coada.empty()) {
        viziteaza(coada.front());
        coada.pop();
    }

    for(i = 2; i <= n; i++) {
        fout << graf[i].cost << ' ';
    }
    return 0;
}