Cod sursa(job #1192409)

Utilizator hellol30FMI Macovei Daniel hellol30 Data 28 mai 2014 22:24:18
Problema Algoritmul lui Dijkstra Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.91 kb
#include<cstdio>
#include<vector>
#include<queue>
#define x first
#define y second
using namespace std;
#define Mmax 50001
 
vector< pair<int,int> > a[Mmax];
pair<int,int> aux1;
vector<int> d(Mmax,1<<30) ;
queue<int> q;

int n,m,z,nod,cost,aux,aa,bb;

void dijkstra(){	
	q.push(1);
	d[1]=0;
	while(!q.empty()){
		aux=q.front();q.pop();
		for(vector< pair<int,int> >::iterator it=a[aux].begin(); it!=a[aux].end(); it++) {
			cost=it->y; nod=it->x;
			if(d[nod]>d[aux]+cost) {
				d[nod]=d[aux]+cost; q.push(nod);
			}
        }
    }
}
int main() {
	freopen("dijkstra.in","rt",stdin);
	freopen("dijkstra.out","wt",stdout);
	scanf("%d%d",&n,&m);
	for(int i=1;i<=m;i++){
		scanf("%d%d%d",&aa,&bb,&z);
		a[aa].push_back(make_pair(bb,z));
		a[bb].push_back(make_pair(aa,z));
	}
	dijkstra();
	for(int i=2; i<=n;i++){
		printf("%d ", d[i] == 1<<30? 0 : d[i]);
	}
	printf("\n");
	return 0;
}