Cod sursa(job #256005)

Utilizator eugen.nodeaEugen Nodea eugen.nodea Data 10 februarie 2009 22:52:08
Problema Algoritmul lui Dijkstra Scor 90
Compilator cpp Status done
Runda Arhiva educationala Marime 0.86 kb
# include <stdio.h>
# include <stdlib.h>
# define nmax 50001
# define inf 2000000000
struct nod{
  int v,c;
  nod * ad;	
} *G[nmax];
long D[nmax],C[4*nmax];
int N,M;
char viz[nmax];
int main()
{
  int i,x,y,c;
  long p,u;
  nod *q;
  freopen("dijkstra.in","r",stdin);
  freopen("dijkstra.out","w",stdout);
  scanf("%ld %ld",&N,&M);
  for (i=1;i<=M;++i){
   scanf("%d %d %d",&x,&y,&c);
   q=new nod;
   q->v=y; q->c=c; 
   q->ad=G[x]; G[x]=q;	 
  } 
  for (i=2;i<=N;++i)
    D[i]=inf;
  p=u=C[1]=viz[1]=1;
  while (p<=u){
    q=G[C[p]];
    while(q!=NULL){
	if (q->c+D[C[p]]<D[q->v]){
	      D[q->v]=q->c+D[C[p]];
	      if (viz[q->v]==0) {
				  ++u; C[u]=q->v;
				  viz[q->v]=1;
				}
	  }
	q=q->ad;
    }
   viz[C[p]]=0;
   ++p;
  }
  for (i=2;i<=N;++i)
     if (D[i]!=inf) printf("%ld ",D[i]);
	else printf("0 ");
  return 0;
 }