Cod sursa(job #693267)

Utilizator dragan1alexDragan Andrei Alexandru dragan1alex Data 27 februarie 2012 11:31:54
Problema Algoritmul lui Dijkstra Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.87 kb
#include<fstream>
using namespace std;
ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");
#define nm 1000000000
int c[1200][1200],n,t[1200],d[1200],s[1200],m;

void citire(){
	fin>>n>>m;
	int x,y,ct,i,j;
	for(i=1;i<=n;i++)
		for(j=1;j<=n;j++)
			if(i!=j)
				c[i][j]=nm;
	for(i=1;i<=m;i++){
		fin>>x>>y>>ct;
		c[x][y]=ct;
	}
}
void dj(int r){
	for(int i=1;i<=n;i++){
		d[i]=c[r][i];
		if(d[i]==0&&i!=r)
			d[i]=nm;
		if(d[i]<nm)
			t[i]=r;
	}
	t[1]=0;
	s[r]=1;
	for(int j=1;j<n;j++){
		int min=nm,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(){
	int r=1;
	citire();
	dj(r);
	for(int i=2;i<=n;i++)
		fout<<d[i]<<" ";
	return 0;
}