Cod sursa(job #664976)

Utilizator BarracudaFMI-Alex Dobrin Barracuda Data 21 ianuarie 2012 12:29:30
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.94 kb
#include<fstream>
#define lim1 50002
#define lim2 250002
#define inf 50000000
using namespace std;
ifstream f("dijsktra.in");
ofstream g("dijkstra.out");
int n,m,D[lim1],S[lim1],X[lim2],Y[lim2],C[lim2],minim,nod,i,j;
void citire(){
	f>>n>>m;
	for(i=2;i<=n;i++)
		D[i]=inf;
	S[1]=1;
	for(i=1;i<=m;i++){
		f>>X[i]>>Y[i]>>C[i];
		if(X[i]==1)
			D[Y[i]]=C[i];
	}
}
void maruntis (int &nod,int &minim){
	minim=inf;
	for(i=1;i<=n;i++){
		if(!S[i] && D[i]<minim){
			
			minim=D[i];
			nod=i;
			
		}
		
		
	}
	
	S[nod]=1;
	
	
}
void trecilamunca(){
	for(i=1;i<n;i++){
		maruntis(nod,minim);
		
		
		for(j=1;j<=m;j++){
			
			if(X[j]==nod && !S[Y[j]]){
				
				if(D[Y[j]]>minim+C[j])
					D[Y[j]]=minim+C[j];
				
			}
			
			
		}
		
	}
	
	
}
void scrie(){
	for(i=2;i<=n;i++){
		if(D[i]!=inf)
			g<<D[i]<<" ";
		else
			g<<"0"<<" ";
	}
}
int main (){
	citire();
	trecilamunca();
	scrie();
	return 0;
}