Cod sursa(job #329724)

Utilizator irene_mFMI Irina Iancu irene_m Data 7 iulie 2009 12:00:09
Problema Algoritmul lui Dijkstra Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 0.97 kb
#include <fstream.h>
#define MaxN 10009
#define MaxM 250009
#define Inf 1000009

ofstream fout("dijkstra.out");

int a[MaxN][MaxN],m,d[MaxN],s[MaxN],t[MaxN],nod,n;

void cit()
{
	int i,j,x,y,c;
	ifstream fin("dijkstra.in");
	fin>>n>>m; nod=1;
	for(i=1;i<=n;i++)
		for(j=1;j<=n;j++)
			if(i!=j)
			{
				a[i][j]=Inf;
				if(i==nod)
					d[j]=Inf;
			}
	for(i=1;i<=m;i++)
	{
		fin>>x>>y>>c;
		a[x][y]=c;
		if(x==nod)
		{
			d[y]=c;
			t[y]=nod;
		}
	}
}

int min()
{
	int i,val=Inf,poz=0;
	for(i=1;i<=n;i++)
		if(!s[i] && d[i]<val)
		{
			val=d[i];
			poz=i;
		}
	return poz;
}

void dijkstra()
{
	int poz,nr=1,i;
	s[nod]=1;
	while(nr<n)
	{
		poz=min();
		s[poz]=1; nr++;
		for(i=1;i<=n;i++)
			if(!s[i] && d[poz]+a[poz][i]<d[i])
			{
				d[i]=d[poz]+a[poz][i];
				t[i]=poz;
			}
	}
}

void afis()
{
	int i;
	for(i=2;i<=n;i++)
		fout<<d[i]<<" ";
	fout.close();
}
	
int main()
{
	cit();
	dijkstra();
	afis();
	return 0;
}