Cod sursa(job #401685)

Utilizator niovanIovan Alexandru niovan Data 23 februarie 2010 02:00:08
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.98 kb
#include<fstream>
#define NMaxVF 50001
#define Inf 1001
using namespace std;
fstream fin("dijkstra.in",ios::in);
fstream fout("dijkstra.out",ios::out);

int pre[NMaxVF],n,x0=1;
double Cost[NMaxVF][NMaxVF],d[NMaxVF];
int M[NMaxVF];

void Initializare()
{
	int i,j,m,x,y,c;
	fin>>n>>m;
	for(i=1;i<=n;i++)
		for(j=i+1;j<=n;j++)
			Cost[i][j]=Cost[j][i]=Inf;

	for(i=0;i<m;i++)
	{
		fin>>x>>y>>c;
		Cost[x][y]=Cost[y][x]=c;
	}
	for(i=1;i<=n;i++)
	{
		pre[i]=x0;
		d[i]=Cost[x0][i];
	}
	pre[x0]=0;
	M[x0]=1;
}


void Dijkstra()
{
	int i,j,VfMin;
	double dMin;
	for(i=1;i<n;i++)
	{
		dMin=Inf;
		for(j=1;j<=n;j++)
			if(!M[j]&&d[j]<dMin)
				{ dMin=d[j]; VfMin=j; }
		M[VfMin]=1;
		for(j=1;j<=n;j++)
			if(!M[j]&&d[j]>dMin+Cost[VfMin][j])
			{
				pre[j]=VfMin;
				d[j]=dMin+Cost[VfMin][j];
			}
	}
}

void Afisare()
{
	int i;
	for(i=2;i<=n;i++)
		fout<<d[i]<<" ";
}
	


int main()
{
	Initializare();
	Dijkstra();
	Afisare();
	return 0;
}