Cod sursa(job #386921)

Utilizator miticaMitica mitica Data 26 ianuarie 2010 12:40:03
Problema Algoritmul lui Dijkstra Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.82 kb
#include <stdio.h>
#include <stdlib.h>
#define inf 10005

int n,m,i,j,x,y,min,**c,ct,d[50005],viz[50005];

int main()
{
	freopen("dijkstra.in","r",stdin);
	freopen("dijkstra.out","w",stdout);
	scanf("%d %d", &n, &m);
	c=(int**) calloc(n+1,sizeof(int *));
	for (i=1;i<=n;i++)
		{
		 c[i]=(int *) calloc(n+1,sizeof(int));
		 for (j=1;j<=i;j++)
			  c[i][j]=c[j][i]=inf;
		}
	for (i=1;i<=m;i++)
		{
			scanf("%d %d %d", &x, &y, &ct);
			c[x][y]=ct;
		}
	for (i=1;i<=n;i++)
		if (i!=1)
			d[i]=c[1][i];
	viz[1]=1;
	for (j=1;j<n;j++)
		{
			min=inf;
			for (i=1;i<=n;i++)
				if (!viz[i] && min>d[i])
					{
						min=d[i];
						y=i;
					}
			viz[y]=1;
			for (i=1;i<=n;i++)
				if (!viz[i] && d[i]>min+c[y][i])
							d[i]=min+c[y][i];
		}
	for (i=2;i<=n;i++)
		printf("%d ", d[i]);
	return 0;
}