Cod sursa(job #312513)

Utilizator andyciupCiupan Andrei andyciup Data 6 mai 2009 11:35:08
Problema Algoritmul lui Dijkstra Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 0.96 kb
#include<stdio.h>
#define N 1001
#define oo 50000001
int cost[N][N]={0};
bool s[N];
int d[N]={0}, m, n;
void citesc(){
	int a, b, c;
	scanf("%d", &n);
	scanf("%d", &m);
	for(int i=1;i<=n;++i)
		for(int j=1;j<=n;++j)
			if(i==j)
				cost[i][j]=0;
			else
				cost[i][j]=oo;
	for(int i=1; i<=m;++i){
		scanf("%d", &a);
		scanf("%d", &b);
		scanf("%d", &c);
		cost[a][b]=c;
	}
	for(int i=2; i<=n;++i)
		d[i]=oo;
}
int minim(){
	int a=oo, contor;
	for(int i=1; i<=n;++i)
		if(s[i]==0)
			if(d[i]<a){
				contor=i;
				a=d[i];
				}
	return contor;
}

void djk(){
	int x;
	d[1]=0;
	for(int i=1; i<n;++i)
	{
		x=minim();
		s[x]=1;
		for(int i=1; i<=n;++i)
			if(d[i]>d[x]+cost[x][i])
				d[i]=d[x]+cost[x][i];
	}
}
int main(){
	freopen("dijkstra.in", "r", stdin);
	freopen("dijkstra.out", "w", stdout);
	citesc();
	djk();
	for(int i=2; i<=n;++i){
		if(d[i]==oo)
			printf("%d ", 0);
		else printf("%d ", d[i]);
	}
	return 0;
}