Cod sursa(job #270144)

Utilizator vladbBogolin Vlad vladb Data 3 martie 2009 19:35:58
Problema Algoritmul lui Dijkstra Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 0.84 kb
#include<stdio.h>

const int max=32000;
int n,m,a[1001][1001],s[1001],t[1001],min,poz;
long d[1001];

int main()
{   freopen("dijkstra.in","r",stdin);
    freopen("dijkstra.out","w",stdout);
    int x,y,z,i,j;
    scanf("%ld%ld",&n,&m);
    for(i=1;i<=n;i++)
	for(j=1;j<=n;j++)
	    a[i][j]=32000;
    for(i=1;i<=m;i++)
    {   scanf("%d%d%d",&x,&y,&z);
	a[x][y]=z;
    }
    s[1]=1;
    for(i=1;i<=n;i++)
    {   d[i]=a[1][i];
	if(i!=1) if(d[i]<max) t[i]=1;
    }
    for(i=1;i<n;i++)
    {   min=max;
	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++)
       if(d[i]!=max)	printf("%ld ",d[i]);
	else printf("0 ");
    return 0;
}