Cod sursa(job #656951)

Utilizator BarracudaFMI-Alex Dobrin Barracuda Data 5 ianuarie 2012 15:54:12
Problema Algoritmul lui Dijkstra Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.99 kb
#include<cstdio>
#define inf 1002
#define max 5002
int a[max][max],d[max],s[max],n,m,xp;
void citire (){
	int x,y;
	freopen("dijkstra.in","r",stdin);
	freopen("dijkstra.out","w",stdout);
	
	scanf("%d%d",&n,&m);
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++)
			a[i][j]=inf;
		a[i][i]=0;
	}
	int c;
	for(int i=1;i<=m;i++){
		scanf("%d%d%d",&x,&y,&c);
		a[x][y]=c;
	}
	
}
void initd(){
	s[xp]=1;
	for(int i=1;i<=n;i++)
		d[i]=a[xp][i];
}
int  minim (){
	int i,p,min;
	min=inf;p=1;
	for(i=1;i<=n;i++)
		if(s[i]==0 && d[i]<min){
			min=d[i];
			p=i;
		}
	return p;
}


void dijkstra (){
	int x,i,k;
	x=0;
	do{
		x++;
		k=minim();
		s[k]=1;
		for(i=1;i<=n;i++){
			if(!s[i]  &&d[i]>d[k]+a[k][i] && a[k][i]<inf && a[k][i]>0)
				d[i]=d[k]+a[k][i];
		}
	}while(x!=n && d[k]!=inf);	
}
void afisare(){
	for(int i=1;i<=n;i++)
		if(d[i]!=0 && d[i]!=inf)
			printf("%d ",d[i]);
}
int main (){
    xp=1;
    citire();
	initd();
	dijkstra ();
	afisare();
	return 0;
}