Cod sursa(job #883549)

Utilizator nutzu95ionut suciu nutzu95 Data 20 februarie 2013 09:35:48
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.89 kb
#include <cstdio>

int n,m,i,j,x,y,cost;
int inf=10000,dmin,vmin;
int a[50010][50010],p[50010],d[50010],s[50010];

int main()
{
	freopen("djikstra.in","r",stdin);
	freopen("djikstra.out","w",stdout);
	scanf("%d %d",&n,&m);
	for(i=1;i<=n;i++)
		for(j=1;j<=n;j++)
			a[i][j]=inf;
	
	for(i=1;i<=m;i++)
	{
		scanf("%d %d %d",&x,&y,&cost);
		a[x][y]=cost;
	}
	
	for(i=1;i<=n;i++)
	{
		p[i]=0;
		d[i]=inf;
		s[i]=0;
		if(a[1][i]<inf)
		{
			d[i]=a[1][i];
			p[i]=1;
		}
	}
	s[1]=1;
	
	for(j=1;j<=n;j++)
	{
		dmin=inf;
		vmin=0;
		for(i=1;i<=n;i++)
			if(s[i]==0 && d[i]<dmin)
			{
				dmin=d[i];
				vmin=i;
			}
		if(vmin!=0)
		{
			s[vmin]=1;
			for(i=1;i<=n;i++)
				if(a[vmin][i]<inf)
					if(d[i]>d[vmin]+a[vmin][i])
					{
						d[i]=d[vmin]+a[vmin][i];
						p[i]=vmin;
					}
		}
	}
	for(i=2;i<=n;i++)
		printf("%d ",d[i]);
	printf("\n");

	return 0;
}