Cod sursa(job #410307)

Utilizator f.v.antonFlavius Anton f.v.anton Data 4 martie 2010 11:38:03
Problema Algoritmul lui Dijkstra Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 0.88 kb
#include <iostream>
#include <fstream>
#define N 50000
#define infinit 2000000000
using namespace std;
int cost[2048][2048];
char viz[N];
int main()
{
	fstream f("dijkstra.in",ios::in), g("dijkstra.out",ios::out);
	int m,n,i,j,x,y,c,d[N],min;
	f>>n>>m;
	
	for(i=1;i<=n;i++)
	{
		d[i]=infinit;
		for(j=1;j<=n;j++)
			if(i!=j) cost[i][j]=infinit;
	}
	for(i=1;i<=m;i++)
	{
		f>>x>>y>>c;
		cost[x][y]=c;
	}
	d[1]=0;
	viz[1]=1;
	for(i=1;i<=n;i++)
		d[i]=cost[1][i];
	int vf;
	do{
		min=infinit;
		for(i=1;i<=n;i++)
			if(viz[i]==0&&d[i]<min)
			{
				min=d[i]; vf=i;
			}
		if(min<infinit)
		{
			viz[vf]=1;
			for(i=1;i<=n;i++)
				if(viz[i]==0&&d[vf]+cost[vf][i]<d[i])
				{
					d[i]=d[vf]+cost[vf][i];
				}
		}
	}while(min<infinit);
	for(i=2;i<=n;i++)
		if(d[i]==infinit)
			g<<0<<" ";
		else
		g<<d[i]<<" ";
	g.close();
	f.close();
	return 0;
}