Cod sursa(job #649963)

Utilizator johnny2008Diaconu Ion johnny2008 Data 16 decembrie 2011 23:26:13
Problema Algoritmul lui Dijkstra Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 0.88 kb

#include<fstream>
#include<iostream>
using namespace std;
#define nmax 50001
int d[nmax];
int vec[nmax][1001];
int dist[nmax][1001];
int n,m,i,j,a,b;
int que[nmax];


int main(){
	ifstream fi("dijkstra.in");
	ofstream g("dijkstra.out");
	fi>>n>>m;
	for(i=1;i<=m;i++){
		if(i<=n)
			d[i]=1000000;
		fi>>a>>b>>j;
		vec[a][0]++;
		vec[a][vec[a][0]]=b;
		
		dist[a][b]=j;
		dist[b][a]=j;
		
	}
	d[1]=0;
	que[1]=1;
	int f=1,l=1;
	
	
	while(f<=l){
		
		int nod=que[f];	
		//cout<<nod<<" "<<d[nod]<<"\n";
		for(i=1;i<=vec[nod][0];i++){
			int vecin=vec[nod][i];
			if(d[vecin]>d[nod]+dist[nod][vecin]){
				d[vecin]=d[nod]+dist[nod][vecin];
				l++;
				que[l]=vecin;
				//cout<<vecin<<" "<<nod<<" "<<d[vecin]<<" "<<d[nod]<<"\n";
			}
			
		}
		f++;
		
	}
	for(i=2;i<=n;i++){
		if(d[i]==1000000)
			g<<"0 ";
		else
			g<<d[i]<<" ";
	}
	
	return 0;
}