Cod sursa(job #693265)

Utilizator diehardNasturel Gabriel diehard Data 27 februarie 2012 11:31:36
Problema Algoritmul lui Dijkstra Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.87 kb
#include<fstream>
#include<iostream>
using namespace std;
ifstream in("dijkstra.in");
ofstream out("dijkstra.out");
#define infinit 1000000000
int c[1200][1200],n,d[1200],s[1200],m;

void citire(){
	in>>n>>m;
	int x,y,ct;
	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++){
		in>>x>>y>>ct;
		c[x][y]=ct;
	}
}

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

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