Cod sursa(job #387959)

Utilizator cezyGrigore Cezar cezy Data 28 ianuarie 2010 20:27:29
Problema Algoritmul lui Dijkstra Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1 kb
#include<fstream>
#include<iostream.h>
using namespace std;
const int inf= 1<<20;
const int NMAX=10000;
int c[NMAX][NMAX];
int d[NMAX];
int n,k,m[NMAX],pred[NMAX],x0=1;
void afis();
void citire()
{
	ifstream f("dijkstra.in");
	f>>n>>k;
	int i,j,x,y,cost;
	for(i=1;i<=n;i++)
		for(j=i+1;j<=n;j++)
			if(i!=j) c[i][j]=c[j][i]=inf;
	for(i=1;i<=k;i++)
		{
			f>>x>>y>>cost;
			c[x][y]=cost;
		}
	for(i=1;i<=n;i++)
	{
		d[i]=c[x0][i];pred[i]=x0;
	}
	m[x0]=1;pred[x0]=0;
	f.close();
}
void dijkstra ()
{
	int i,j,poz;
	for(i=1;i<n;i++)
	{
		int minim=inf;
		for(j=1;j<=n;j++)
			if(!m[j] && minim>d[j]) {minim=d[j];poz=j;}
		m[poz]=1;
		for(j=1;j<=n;j++)
			while(!m[j] && d[j]>d[poz]+c[poz][j])
			{
				d[j]=d[poz]+c[poz][j];
				pred[j]=poz;
			}
	}
}
void afis()
{
	int i,j,drum[NMAX];
	ofstream fout("dijkstra.out");
	for(i=2;i<=n;i++)
		if(d[i]!=inf)
			fout<<d[i]<<' ';
		else
			fout<<0;
	fout.close();
}
int main ()
{
	citire();
	dijkstra();
	afis();
	return 0;
}