Cod sursa(job #187093)

Utilizator runnaway90Oprescu Radu Constantin runnaway90 Data 30 aprilie 2008 15:30:08
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.92 kb
#include<stdio.h>
#define INF 2000000000


long d[2000],fol[2000],sol[1000][1000],n,m,i,j,a,b,c;

void rezolva();

int main()
{
    freopen("dijkstra.in","r",stdin);
    freopen("dijkstra.out","w",stdout);
    scanf("%ld %ld",&n,&m);
    for (i=1;i<=n;i++)
	for (j=1;j<=n;j++)
	    sol[i][j]=INF;
    for (i=1;i<=m;i++)
	scanf("%ld %ld %ld",&a,&b,&c),sol[a][b]=c,sol[b][c]=c;
    rezolva();
    for (i=2;i<=n;i++)
	printf("%ld ",d[i]);
    return 0;
}

void rezolva()
{long min,nod=1;
     for (i=2;i<=n;i++)
	 d[i]=sol[1][i];
     fol[1]=1;
     c=1;
	    while(1)
	    {
		   min=INF;
		   for (i=1;i<=n;i++)
		       if (sol[c][i]<min && !fol[i])
		       {
			  min = sol[c][i];
			  nod =i;
		       }
		   fol[nod]=1;
		   c=nod;
		   if (min == INF)
		      break;
		   else
		       for (i=0;i<=n;i++)
			   if (d[i]> d[nod] + sol[nod][i] )
			       d[i] = d[nod] + sol[nod][i];
	    }
}