Pagini recente » Cod sursa (job #1199966) | Cod sursa (job #2885150) | Cod sursa (job #2900817) | Cod sursa (job #1942758) | Cod sursa (job #2206599)
#include <iostream>
#include <fstream>
#define infinit 2000000000
#include <set>
using namespace std;
int n,m;
ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");
struct nod
{
int info;
int cost;
nod*urm;
}*g[50001];
void Addelem(nod *&prim,int info,int y)
{ nod *q=new nod;
q->info=info;
q->cost=y;
q->urm=prim;
prim=q;
}
int d[50001],viz[50001];
int main()
{ fin>>n>>m;
int x,y,z;
for(int i=1;i<=m;i++)
{
fin>>x>>y>>z;
Addelem(g[x],y,z);
Addelem(g[y],x,z);
}
for(int i=2;i<=n;i++)
d[i]=infinit;
d[1]=0;
set < pair<int,int> >Q;
Q.insert(make_pair(d[1],1));
for(int i=1;i<=n;i++)
{
pair<int,int> p=(*(Q.begin()));
Q.erase(Q.begin());
x=p.first;
y=p.second;
viz[y]=1;
for(nod*p=g[y];p!=NULL;p=p->urm)
{
if(viz[p->info]==0)
if(p->cost+d[y]<d[p->info])
{ Q.erase({d[p->info],p->info});
d[p->info]=p->cost+d[y];
Q.insert(make_pair(d[p->info],p->info));
}
}
}
for(int i=2;i<=n;i++)
fout<<d[i]<<" ";
return 0;
}