Cod sursa(job #693311)

Utilizator TeddyBossStefu Teodor Petre TeddyBoss Data 27 februarie 2012 11:42:51
Problema Algoritmul lui Dijkstra Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.81 kb
#include<fstream>
#include<iostream>

using namespace std;
ifstream in("dijkstra.in");
ofstream out("dijkstra.out");

#define infinit 1000000000

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

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

void dijkstra(int r){
	for(int i=1;i<=n;i++){
		d[i]=c[r][i];
	}
	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;}}}}

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