Cod sursa(job #337747)

Utilizator qSortMorariu Razvan qSort Data 4 august 2009 21:27:02
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.95 kb
#include <stdio.h>

typedef long matrice[50000][50000];
const infinit=2000;
matrice a;
long n, m, i, j, r, cost, inf, min, poz, t[50000], s[50000], d[50000];


	int main()
	{
		freopen("dijkstra.in","r",stdin);
		freopen("dijkstra.out","w",stdout);
		scanf("%d %d\n",&n,&m);
		for (i=1; i<=n; i++)
			for (j=1; j<=n; j++)
				if (i!=j) a[i][j]=infinit;
		for (int k=1; k<=m; ++k)
			{
			scanf("%d%d%d",&i,&j,&cost);
			a[i][j]=cost;
			}
		r=1;
		s[r]=1;
		for (i=1; i<=n; ++i)
			{
			d[i]=a[r][i];
			if (i!=r)
				if (d[i]<infinit) t[i]=r;
			}
		for (i=1; i<=n-1; ++i)
			{
			min=infinit;
			for (j=1; j<=n; ++j)
				if (s[j]==0)
					if (d[j]<min)
						{
						min=d[j];
						poz=j;
						}
			s[poz]=1;
			for (j=1; j<=n; ++j)
				if (s[j]==0)
					if (d[j]>d[poz]+a[poz][j])
						{
						d[j]=d[poz]+a[poz][j];
						t[j]=poz;
						}
			}
		for (i=2; i<=n; ++i)
			{
			printf("%d ",d[i]);
			}

		return 0;
	}