Cod sursa(job #278416)

Utilizator paulDeac Adrian paul Data 12 martie 2009 12:09:36
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.88 kb
#include<stdio.h>
#include<values.h>

const long long unsigned inf= MAXLONG;

#define in "dijkstra.in"
#define out "dijkstra.out"

long long unsigned m,n,a[10501][10501],i,j,k,d[10501],min,s[10501],poz,c;

int main()
{
	freopen(in,"r",stdin);
	freopen(out,"w",stdout);
	scanf("%llu%llu",&n,&m);

	for(i=1;i<=n;i++)
		for(j=1;j<=n;j++)
			if(i!=j)
				a[i][j]=inf;

	for(i=1;i<=m;i++)
	{
		scanf("%llu%llu%llu",&j,&k,&c);
		a[j][k]=c;
	}
	for(i=1;i<=n;i++)
		d[i]=a[1][i];
	s[1]=1;
	for(i=1;i<n;i++)
	{
		min=inf;
		for(j=1;j<=n;j++)
		{
			if(!s[j])
			{
				if(d[j]<min)
				{
					min=d[j];
					poz=j;
				}
			}
		}
		s[poz]=1;
		for(j=1;j<=n;j++)
		{
			if(!s[j])
			{
				if(d[j]>d[poz]+a[poz][j])
					d[j]=d[poz]+a[poz][j];
			}
		}
	}
	for(i=2;i<=n;i++)
	if(d[i]!=MAXLONG)
		printf("%llu ",d[i]);
	else
		printf("0 ");
	return 0;
}