Cod sursa(job #314657)

Utilizator ovy2906Popescu Ovidiu ovy2906 Data 12 mai 2009 13:39:39
Problema Algoritmul lui Dijkstra Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 0.86 kb
#include<stdio.h>
const int N=1000;
const int inf=100000000;
int n,ap[N],a[N][N],c[N][N],d[N];
void citire();
void dijkstra(int);
int min();
int main (){
	freopen("dijkstra.in","r",stdin);
	freopen("dijkstra.out","w",stdout);
	citire();
	dijkstra(1);
	for(int i=2;i<=n;i++)
		if(d[i]!=inf)
			printf("%d ",d[i]);
		else
			printf("0 ");
	return 0;
}
void dijkstra(int x){
	int i,j,y;
	for(i=1;i<=n;++i)
		d[i]=inf;
	d[x]=0;
	for(i=1;i<n;i++){
		x=min();
		ap[x]=1;
		for(j=1;j<=a[x][0];j++){
			y=a[x][j];
			if(d[y]>d[x]+c[x][j])
				d[y]=d[x]+c[x][j];
		}
	}
}
int min(){
	int m,dm=inf;
	for(int i=1;i<=n;i++)
		if(dm>d[i] && ap[i]==0){
			dm=d[i];
			m=i;
		}
	return m;
}
void citire(){
	int m,x,y,cost;
	scanf("%d%d",&n,&m);
	while(m--){
		scanf("%d%d%d",&x,&y,&cost);
		a[x][++a[x][0]]=y;
		c[x][++c[x][0]]=cost;
	}
}