Cod sursa(job #475890)

Utilizator Addy.Adrian Draghici Addy. Data 8 august 2010 23:43:06
Problema Algoritmul lui Dijkstra Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 0.9 kb
#include <cstdio>
#include <vector>

using namespace std;

#define NMAX 50050
#define INF 1 << 30

int C[NMAX], viz[NMAX], n, m, i, j, x, y, c, cmin, nod, fiu, cost;
vector < pair <int, int> > G[NMAX];

int main () {
	
	freopen ("dijkstra.in", "r", stdin);
	freopen ("dijkstra.out", "w", stdout);
	
	scanf ("%d %d", &n, &m);
	for (i = 1; i <= m; i++) {
		scanf ("%d %d %d", &x, &y, &c);
		G[x].push_back (make_pair (y, c));
	}
	
	for (i = 2; i <= n; i++)
		C[i] = INF;
	
	for (i = 1; i <= n; i++) {
		cmin = INF, nod = 0;
		
		for (j = 1; j <= n; j++)
			if (C[j] < cmin && !viz[j])
				cmin = C[j], nod = j;
		
		viz[nod] = 1;
		for (j = 0; j < (int) G[nod].size(); j++) {
			fiu = G[nod][j].first, cost = G[nod][j].second;
			if (C[nod] + cost < C[fiu])
				C[fiu] = C[nod] + cost;
		}
	}
	
	for (i = 2; i <= n; i++)
		printf ("%d ", C[i] != INF ? C[i] : 0);
	
	return 0;
}