Cod sursa(job #649840)

Utilizator johnny2008Diaconu Ion johnny2008 Data 16 decembrie 2011 20:23:19
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1 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 viz[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]=10000;
		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;
	viz[1]=true;
	int f=1,l=1;
	for(l=1;l<=vec[f][0];l++){
		que[l]=vec[f][l];
		d[vec[f][l]]=dist[1][vec[f][l]];
		este[que[l]]=true;
	}
	while(f<=l){
		int nod=que[f];	
		for(i=1;i<=vec[nod][0];i++){
			int vecin=vec[nod][i];
			if(viz[vecin]==false)	
				if(d[vecin]>d[nod]+dist[nod][vecin]){
					d[vecin]=d[nod]+dist[nod][vecin];
				}
			if(este[vecin]==false){
				l++;
				que[l]=vecin;
				este[vecin]=true;
			}
		}
		f++;
		viz[nod]=true;
	}
	for(i=2;i<=n;i++){
		g<<d[i]<<" ";
	}
	
	return 0;
}