Cod sursa(job #933563)

Utilizator VladMSBonta vlad valentin VladMS Data 30 martie 2013 09:39:32
Problema Algoritmul lui Dijkstra Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.03 kb
//DIJKSTRA
#include <fstream>
#include <queue>
#define pinf 1<<30
#include <vector>
using namespace std;
ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");
vector<pair<int,int> > l[50001];
vector<pair<int,int> >::iterator it;
queue<int> co;
int i,j,n,cost,x,y,d[50001],m,k;
void dijkstra(int start )
{
    for(i=1;i<=n;++i)
        d[i]=pinf;
    d[start]=0;
    co.push(start);
    while(!co.empty())
    {
        x=co.front();
        co.pop();
        k=0;
        for(it=l[x].begin();it!=l[x].end();it++,k++)
            if(d[x]+l[x][k].second<d[l[x][k].first])
                {
                    d[l[x][k].first]=d[x]+l[x][k].second;
                    co.push(l[x][k].first);
                }
    }
}
int main()
{
    fin>>n>>m;
    for(i=1;i<=m;++i)
        {
            fin>>x>>y>>cost;
            l[x].push_back(make_pair(y,cost));
        }
    dijkstra(1);
    for(i=2;i<=n;++i)
    if(d[i]!=pinf)
            fout<<d[i]<<" ";
        else
        fout<<0<<" ";
    return 0;
}