Cod sursa(job #665117)

Utilizator dariusgDarius Galis dariusg Data 21 ianuarie 2012 17:55:15
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.05 kb
#include <cstdio>
#include <climits>
FILE *f=fopen("dijkstra.in","r");
FILE *g=fopen("dijkstra.out","w");
int i,j,L[250001],col[250001],C[250001],d[250001],s[250001],n,m,min,nod;

int main()
{
	fscanf(f,"%d%d",&n,&m);
	for(i=1;i<=n;i++)
		if(d[i]==0)
			d[i]=INT_MAX;
		
	for(i=1;i<=m;i++)
	{
		fscanf(f,"%d%d%d",&L[i],&col[i],&C[i]);
		if(L[i]>col[i])
		{
		    nod=L[i];
		    L[i]=col[i];
		    col[i]=nod;
		}
		if(L[i]==1)
			d[col[i]]=C[i];
		
	}
	s[1]=1;
	
	for(i=1;i<n;i++)
	{
		min=INT_MAX;
		for(j=1;j<=n;j++)
			if(s[j]==0)
                if(d[j]<min)
                {
                    min=d[j];
                    nod=j;
                }
		s[nod]=1;
		for(j=1;j<=m;j++)
			if(L[j]==nod)
			{
				if(min+C[j]<d[col[j]])
					d[col[j]]=min+C[j];
            }
            else
                if(col[j]==nod)
                    if(min+C[j]<d[L[j]])
                        d[L[j]]=min+C[j];
	}
	
	for(i=2;i<=n;i++)
		if(d[i]>=INT_MAX)
			fprintf(g,"0 ");
		else
			fprintf(g,"%d ",d[i]);
	return 0;
}