Cod sursa(job #702296)

Utilizator darle.gheorgheDarle Gheorghe darle.gheorghe Data 1 martie 2012 20:49:50
Problema Algoritmul lui Dijkstra Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 0.98 kb
#include<stdio.h>
FILE *fin, *fout;
long c[20000][20000];
long n,m,x,y,v;

int citire()
{
long i,j;
fscanf(fin,"%d%d",&n,&m);
for(i=1;i<=n;i++)
	for(j=1;j<=n;j++)
		if(i!=j)
		c[j][i]=c[i][j]=32768;
	while(m!=0)
	{
		fscanf(fin,"%d%d%d",&x,&y,&v);
		c[x][y]=v;
		m--;
	}
}

int parcurgDijkstra()
{
long i,j,k;
long min,vfmin;
long viz[50000],p[50000];
long nod[50000];
	for(i=1;i<=n;i++)
		{
			p[i]=1;
			viz[i]=c[1][i];	
		}
	p[1]=0;
	nod[1]=1;
	for(i=1;i<n;i++)
	{
		min=32767;
		for(j=1;j<=n;j++)
			if(nod[j]==0 && min>viz[j])
			{
			min=viz[j];
			vfmin=j;
			}
		nod[vfmin]=1;
		for(j=1;j<=n;j++)
			if(nod[j]==0 && viz[j]>min+c[vfmin][j])
			{
				p[j]=vfmin;
				viz[j]=min+c[vfmin][j];
			}
	}

for(i=2;i<=n;i++)
{
	if(viz[i]==32768)
		fprintf(fout,"%d ",0);
	else
		fprintf(fout,"%d ",viz[i]);
}
}

main()
{
fin=fopen("dijkstra.in","r");
fout=fopen("dijkstra.out","w");
citire();
parcurgDijkstra();
fclose(fin);
fclose(fout);
}