Cod sursa(job #522510)

Utilizator BlaugranasEnal Gemaledin Blaugranas Data 15 ianuarie 2011 12:59:01
Problema Algoritmul lui Dijkstra Scor 90
Compilator cpp Status done
Runda Arhiva educationala Marime 1.05 kb
#include<stdio.h>
#include<stdlib.h>
#define N 50001
#define M 150000
typedef struct
{long elem[M],nel,prim,ultim;}queue;
typedef struct nod
{long info,cost;
nod *urm;}Nod,*list;
typedef list graf[N];
list r;
graf g;
queue q;
long n,m,d[N],i,j,k,c,p,t,l;

void push(queue &q,long x)
{q.nel++;
q.elem[q.ultim++]=x;}
       
long pop(queue &q)
{q.nel--;
q.prim++;
return q.elem[q.prim-1];}

void add(list &r,long x,long co)
{Nod *c=new Nod;
c->info=x;
c->cost=co;
c->urm=r;
r=c;}

int main()
{freopen("dijkstra.in","r",stdin);
freopen("dijkstra.out","w",stdout);
q.prim=q.ultim=q.nel=0;
scanf("%ld%ld",&n,&m);
for(i=1;i<=n;i++)
      {d[i]=N;
      g[i]=NULL;}
for(k=1;k<=m;k++)
      {scanf("%ld%ld%ld",&l,&j,&c);
      add(g[l],j,c);}
d[1]=0;
push(q,1);
while(q.nel!=0)
      {t=pop(q);
      for(r=g[t];r!=NULL;r=r->urm)
      if(d[r->info]>d[t]+r->cost)
            {d[r->info]=d[t]+r->cost;
            push(q,r->info);}}
for(p=2;p<=n;p++)      
      printf("%ld ",d[p]%N);
fclose(stdin);
fclose(stdout);
return 0;}