Cod sursa(job #649925)

Utilizator johnny2008Diaconu Ion johnny2008 Data 16 decembrie 2011 21:50:49
Problema Algoritmul lui Dijkstra Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.01 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];

bool este[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;
		vec[b][0]++;
		vec[b][vec[b][0]]=a;
		dist[a][b]=j;
		dist[b][a]=j;
	}
	d[1]=0;
	que[1]=1;
	este[1]=true;
	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];
					//cout<<vecin<<" "<<nod<<" "<<d[vecin]<<" "<<d[nod]<<"\n";
				}
			if(este[vecin]==false){
				l++;
				que[l]=vecin;
				este[vecin]=true;
			}
		}
		f++;
		
	}
	for(i=2;i<=n;i++){
		if(d[i]==1000000)
			g<<"0 ";
		else
			g<<d[i]<<" ";
	}
	
	return 0;
}