Cod sursa(job #408033)

Utilizator tiriplicamihaiTiriplica Mihai Dragos tiriplicamihai Data 2 martie 2010 20:09:22
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.94 kb
#include <fstream.h>

struct nod{
	long inf,co;
	nod *urm;}*l[50000];
	
long n,m,r,j,c,min,i,d[50000],s[50000],k;

ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");

void add(long x,long y,long c)
{
	nod *q=new nod;
	q->inf=y;
	q->co=c;
	q->urm=l[x];
	l[x]=q;
}

long exista(long x,long y)
{
	nod *p=l[x];
	while(p)
	{
		if(p->inf==y)
			return p->co;
		p=p->urm;
	}
	return 50000;
}	
			

void cit()
{
	int i,x,y,c;
	fin>>n>>m;
	for(i=1;i<=m;i++)
	{
		fin>>x>>y>>c;
		add(x,y,c);
	}
	fin.close();
}

int main()
{
	cit();
	r=1;
	for(i=1;i<=n;i++)
	{
		d[i]=exista(r,i);
			s[i]=0;
	}
	s[r]=1;
	for(k=1;k<n;k++)
	{
		min=50000;
		for(i=1;i<=n;i++)
			if(!s[i]&&d[i]<min)
			{
				min=d[i];
				j=i;
			}
		for(i=1;i<=n;i++)
			if(!s[i]&&d[i]>d[j]+exista(i,j))
				d[i]=d[j]+exista(i,j);
		s[j]=1;
	}
	for(i=1;i<=n;i++)
		if(i!=r)
		fout<<d[i]<<" ";
				
	fout.close();
	return 0;
}