Pagini recente » Cod sursa (job #1043188) | Cod sursa (job #1575379) | Rating Horia Mercan (horia_mercan) | Cod sursa (job #360564) | Cod sursa (job #246866)
Cod sursa(job #246866)
#include <cstdio>
#define maxn 250001
#define infin 1<<30
#define in "dijkstra.in"
#define out "dijkstra.out"
FILE *fin=fopen(in,"r");
FILE *fout=fopen(out,"w");
struct nod
{
int inf,cost;
nod *urm;
};
int n,m;
nod *l[maxn];
int d[maxn],q[maxn];
void read();
void write();
void add(int,int,int);
void dijkstra();
int main()
{
read();
fclose(fin);
dijkstra();
write();
fclose(fout);
return 0;
}
void add(int x,int y,int cost)
{
nod *q =new nod;
q->inf=y;
q->cost=cost;
q->urm=l[x];
l[x]=q;
}
void read()
{
int i;
fscanf(fin,"%d %d",&n,&m);
int x,y,z;
for(i=1;i<=m;++i)
{
fscanf(fin,"%d %d %d",&x,&y,&z);
add(x,y,z);
}
}
void write()
{
int i;
for(i=2;i<=n;++i)
fprintf(fout,"%d ",d[i]==infin?0:d[i]);
fprintf(fout, "\n");
}
void dijkstra()
{
int i,j;
for(i=2;i<=n;++i)
d[i]=infin;
int min,pmin=0;
for(i=1;i<=n;++i)
{
min=infin;
for(j=1;j<=n;++j)
if(d[j]<min && !q[j])
{
min=d[j];
pmin=j;
}
q[pmin]=1;
nod *t=l[pmin];
while(t)
{
if(d[t->inf]>d[pmin]+t->cost)
d[t->inf]=d[pmin]+t->cost;
t=t->urm;
}
}
}