Cod sursa(job #411703)

Utilizator maditzaaciuca madalina maditzaa Data 5 martie 2010 08:50:50
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.97 kb
#include <fstream.h>
#include <iostream.h>
int a[1001][1001],viz[1001],tata[1001],d[1001];

int n,i,j,min,k,x,c;

const int inf=32000;
ifstream f("dijkstra.in");
ofstream g("dijkstra.out");


void citire (){
	f>>n;
	for(i=1;i<=n;i++)
		for(j=1;j<=n;j++)
			if(i!=j)
				a[i][j] = inf;
	while(f>>i>>j>>c)
		a[i][j] = c;
}

void drum (int i){
	if( tata[i] )
		drum(tata[i]);
	cout <<i<<" ";
}


void dijkstraa(){
	for(i = 1;i <= n; i++){
		d[i] = a[1][i];
		if(d[i] != inf)
			tata[i] = 1;
	}
	tata[1] = 0;
	
	viz[1] = 1;
	
	for(k = 1 ;k <n; k++){
		min = inf;
		for(i = 1;i <= n ;i++)
			if(d[i] < min && ! viz[i]){
				min = d[i];
				j = i;
			}
			viz[j] = 1;
			for(i = 1;i <= n;i++)
				if(!viz[i] && d[i]>d[j] + a[j][i]){
					d[i] = d[j] + a[j][i];
					tata[i] = j;
				}
	}
	for(i = 1; i <=n; i++){
		if(i!=1)
			if(d[i] != inf){
				
				g<<d[i]<<" ";
			}
			
	}
}
int main(){
	citire();
	
	dijkstraa();
	
	return 0;
}