Cod sursa(job #502454)

Utilizator brainwashed20Alexandru Gherghe brainwashed20 Data 19 noiembrie 2010 16:16:06
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.77 kb
#include<stdio.h>
#include<string.h>

#define Nmax 10001

#define INF 0x3f3f3f3f

int N, M, A[Nmax][Nmax], D[Nmax];
char U[Nmax];

void dijkstra() {
	int i, min, nod;
	memset(D,INF,sizeof(D));
	D[1]=0;
	
	while(1) {
		min=INF; nod=-1;
		for(i=1; i<=N; i++)
			if(!U[i] && D[i]<min) {
				min=D[i];
				nod=i;
			}
		if(min==INF)
			break;
		U[nod]=1;
		for(i=1; i<=N; i++)
			if(D[i]>D[nod]+A[nod][i]) 
				D[i]=D[nod]+A[nod][i];
	}
}

int main() {
	freopen("dijkstra.in","r",stdin);
	freopen("dijkstra.out","w",stdout);
	
	int i, j, c;
	scanf("%d %d",&N,&M);
	memset(A,INF,sizeof(A));
	while(M--) {
		scanf("%d %d %d",&i,&j,&c);
		A[i][j]=c;
	}
	
	dijkstra();
	
	for(i=2; i<=N; i++)
		printf("%d ",D[i]);
	printf("\n");
	
	return 0;
}