Cod sursa(job #665038)

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