Cod sursa(job #693232)

Utilizator Ionutz_CristianTuta Ionut-Cristian Ionutz_Cristian Data 27 februarie 2012 11:17:19
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.97 kb
#include<fstream>
using namespace std;
#define infinit 1000000000

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

int c[1200][1200],n,T[1200],s[1200],d[1200],m;

void citire(){
	in>>n>>m;
	int x,y,ct;
	for(int i=1;i<=m;i++){
		in>>x>>y>>ct;
		c[x][y]=ct;
	}
}

void dijkstra(int r){
	for(int i=1;i<=n;i++){
		d[i]=c[r][i];
		if(d[i]==0&&i!=r) d[i]=infinit;
		if(d[i]<infinit) T[i]=r;
	}
	T[r]=0;
	s[r]=1;
	for(int j=1;j<n;j++){
		int min=infinit,poz;
		for(int i=1;i<=n;i++)
			if(!s[i])
				if(d[i]<min){
					poz=i;
					min=d[i];
				}
			s[poz]=1;
			for(int i=1;i<=n;i++)
				if(!s[i]){
					int sc=d[poz]+c[poz][i];
					if(sc<d[i]){
						d[i]=sc;
						T[i]=poz;
					}
		}		}
}
	
/*void drum(){
	if(x){drum(T[x]);
out<<x<<" ";
}
}*/

int main(){
	citire();
	int r;
	in>>r;
	dijkstra(r);
	for(int i=1;i<=n;i++)
		out<<d[i]<<" ";
	out<<"\n";
	/*for(int i=1;i<=n;i++){
		drum(i);
		out<<"\n";
	}*/
	return 0;
}