Cod sursa(job #486704)

Utilizator ClasianMunteanu Petre Clasian Data 22 septembrie 2010 16:39:05
Problema Algoritmul lui Dijkstra Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 0.8 kb
#include<cstdio>
#define inf 50000000
using namespace std;
struct nod { int info,c;
			 nod* lg;
			} *vf[501],*r;
int use[501];
int main()
{ freopen("dijkstra.in","r",stdin);
  freopen("dijkstra.out","w",stdout);
  int n,m,i,a,b,c,D[501],min;
  scanf("%d%d",&n,&m);
  for(i=1;i<=m;i++) { scanf("%d%d%d",&a,&b,&c);
					  r=new nod;
					  r->info=b;
					  r->c=c;
					  r->lg=vf[a];
					  vf[a]=r;
					}
  for(i=1;i<=n;i++) D[i]=inf;
  for(r=vf[1];r;r=r->lg) D[r->info]=r->c;
  use[1]=1;
  while(1) { min=inf;
			 for(i=1;i<=n;i++) if(!use[i]&&D[i]<min)min=D[i],a=i;
			 if(min==inf)break;
			 use[a]=1;
			 for(r=vf[a];r;r=r->lg) if(D[r->info]>D[a]+r->c)D[r->info]=D[a]+r->c;
		   }
  for(i=2;i<=n;i++) if(D[i]==inf)printf("0 ");
				    else printf("%d ",D[i]);
  return 0;
}