Cod sursa(job #771674)

Utilizator roots4Irimia Alexandru Gabriel roots4 Data 26 iulie 2012 19:59:57
Problema Algoritmul lui Dijkstra Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 0.77 kb
#include<stdio.h>
#define dim 50010
#define inf 2000000000
FILE*f=fopen("dijkstra.in","r");
FILE*g=fopen("dijkstra.out","w");

int min,p_min,n,m,a,b,i,D[dim],Fr[dim],d,dist[dim];

struct nod{
	int nr;
	int d;
	nod *adr;
}*L[250010],*p,*c;

int main(){
	fscanf(f,"%d%d",&n,&m);
	for(i=1;i<=m;i++){
		fscanf(f,"%d%d%d",&a,&b,&d);
		p=new nod;
		p->nr=b;
		p->d=d;
		p->adr=L[a];
		L[a]=p;
	}
	for(i=2;i<=n;i++)
		D[i]=inf;
	m=n;
	while(m){
		min=inf;
		for(i=1;i<=n;i++){
			if(D[i]<min&&!Fr[i]){
				min=D[i];
				p_min=i;
			}
		}
		Fr[p_min]=1;
		dist[p_min]=D[p_min];
		c=L[p_min];
		while(c){
			if(D[c->nr]>(min+(c->d)))
				D[c->nr]=min+(c->d);
			c=(c->adr);
		}
		m--;
	}
	
	for(i=2;i<=n;i++)
		fprintf(g,"%d ",dist[i]);
	return 0;
}