Cod sursa(job #312321)

Utilizator mihnea_andreiMihnea Andrei mihnea_andrei Data 5 mai 2009 17:56:58
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.07 kb
#include<fstream> 
#define N 2005
#define W 250000000

using namespace std; 

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

int a[N][N],n,m,d[N-1];

bool viz[N];

void citire () 
{ 
	in>>n>>m;
	for(int i=1;i<=n;i++) 
	{ 
		for(int j=1;j<=n;j++) 
		{ 
			a[i][j]=W;
		}			
	}
	for(int i=1;i<=n;i++) 
	{ 
		a[i][i]=0;
	}
	int x,y,z; 
	for(int i=1;i<=m;i++) 
	{ 
		in>>x>>y>>z; 
		a[x][y]=z;
	} 
}

inline int minim ()
{ 
	int min=W,mini; 
	for(int i=1;i<=n;i++) 
	{ 
		if(!viz[i] && min>d[i]) 
		{				
			min=d[i]; 
			mini=i;
		}
	} 
	return mini;
}

void scrie () 
{ 
	for(int i=2;i<=n;i++) 
	{ 
		if(d[i]==W) 
		{ 
			d[i]=0;
		}
		out<<d[i]<<" ";  
	}
	out<<"\n";
}

void calcul (int x) 
{ 
	for(int i=1;i<=n;i++) 
	{ 
		d[i]=W;
	}
	d[x]=0;
	for(int i=1;i<=n;i++) 
	{
		x=minim ();
		viz[x]=true;
		for(int j=1;j<=n;++j)
		if(a[x][j]+d[x]<d[j]) 
		{ 
			d[j]=a[x][j]+d[x]; 
		}
	}
}

int main () 
{ 
	citire (); 
	calcul (1); 
	scrie (); 
	in.close (); 
	out.close (); 
	return 0; 
}