Pagini recente » Cod sursa (job #3185908) | Cod sursa (job #3163475) | Cod sursa (job #1541977) | Cod sursa (job #2697793) | Cod sursa (job #1316986)
#include <iostream>
#include <set>
#include <vector>
#include <fstream>
using namespace std;
const int nmax=1000000,inf=1<<30;
vector<pair<int,int> > v[nmax];
set<pair<int,int> > S;
int N,M,d[nmax];
void citire()
{
int x,y,c;
ifstream fin("dijkstra.in");
fin>>N>>M;
while(M--)
{
fin>>x>>y>>c;
v[x].push_back(pair<int,int> (c,y));
}
}
void dijk()
{
int cost,varf;
for(int i=2;i<=N;++i)
d[i]=inf;
S.insert(pair<int,int> (0,1));
while(!S.empty())
{
cost=S.begin()->first;
varf=S.begin()->second;
S.erase(S.begin());
for(vector<pair<int,int> >::iterator it=v[varf].begin();it!=v[varf].end();++it)
if(d[it->second]>d[varf]+it->first)
{
S.erase(pair<int,int> (d[it->second],it->second));
d[it->second]=d[varf]+it->first;
S.insert(pair<int,int> (d[it->second],it->second));
}
}
}
void afisare()
{
ofstream fout("dijkstra.out");
for(int i=2;i<=N;++i)
if(d[i]!=inf)
fout<<d[i]<<" ";
else
fout<<0<<" ";
}
int main()
{
citire();
dijk();
afisare();
return 0;
}