Cod sursa(job #850368)

Utilizator mazaandreiAndrei Mazareanu mazaandrei Data 8 ianuarie 2013 13:30:56
Problema Algoritmul lui Dijkstra Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.86 kb
#include <fstream>
#include <vector>
#include <queue>
using namespace std;
ifstream f("dijkstra.in"); ofstream g("dijkstra.out");
int inf=1<<30;
int n,m,dist[50005],acum,y,c,i,x;
struct arc{int nod,cost;};
vector <arc> l[50005];
queue <int> Q;
int main(){
    f>>n>>m;
    while(m--){   f>>x>>y>>c; l[x].push_back((arc){y,c});}
    for(i=2; i<=n; i++) dist[i]=inf;
    Q.push(1);
    while(!Q.empty()){
        acum=Q.front(); Q.pop();
        vector <arc> :: iterator it=l[acum].begin(), sf=l[acum].end();
        for(; it!=sf; ++it){
            if(dist[(*it).nod]>dist[acum]+(*it).cost){
                dist[(*it).nod]=dist[acum]+(*it).cost;
                Q.push((*it).nod);
            }
        }
    }
    for(i=2; i<=n; i++)
        if(dist[i]==inf)
            g<<"0 ";
        else
            g<<dist[i]<<" ";
    g<<"\n";  return 0;
}