Pagini recente » Cod sursa (job #2340555) | Cod sursa (job #198445) | Cod sursa (job #2294806) | Cod sursa (job #2607939) | Cod sursa (job #1130290)
#include <fstream>
using namespace std;
struct list{
int v,c;
list *adr;
};
void add(int i, int j, list *&p)
{
list *tmp;
tmp=new list;
tmp->v=i;
tmp->c=j;
tmp->adr=p;
p=tmp;
}
unsigned int d[50001],pr[50001],v[50001],q[250001];
list *l[50001];
int main()
{ int i,n,m,a,b,dist,fi=1,la=0;
ifstream f("dijkstra.in");
ofstream g("dijkstra.out");
f>>n>>m;
for(i=1;i<=n;i++)
{
l[i]=new list;
l[i]->adr=NULL;
}
for(i=1;i<=m;i++)
{
f>>a>>b>>dist;
add(a,dist,l[b]);
add(b,dist,l[a]);
}
/* for(i=1;i<=n;i++)
{
g<<i<<'\n';
while(l[i]->adr!=NULL)
{
g<<l[i]->v<<' '<<l[i]->c<<'\n';
l[i]=l[i]->adr;
}
}*/
for(i=2;i<=n;i++) d[i]=2100000000;
q[++la]=1;
//v[1]=1;
while(fi<=la)
{
if(l[q[fi]]->adr!=NULL)
{
q[++la]=l[q[fi]]->v;
if(d[q[fi]]+l[q[fi]]->c < d[l[q[fi]]->v])
{
d[l[q[fi]]->v]=d[q[fi]]+l[q[fi]]->c;
pr[l[q[fi]]->v]=q[fi];
}
l[q[fi]]=l[q[fi]]->adr;
}
else {fi++; v[q[fi]]=1; }
}
for(i=2;i<=n;i++) g<<d[i]<<' ';
g<<'\n';
f.close();
g.close();
return 0;
}