Cod sursa(job #363493)

Utilizator iulia609fara nume iulia609 Data 13 noiembrie 2009 16:32:22
Problema Algoritmul lui Dijkstra Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 0.96 kb
#include<stdio.h>
#include<vector>
using namespace std;

int N, M;
vector< pair<int, int> > G[50035];
int D[50001];
const int inf = 999999999;

int main()
{
	int u, v, c, i, j, ind, m[50001], minim;
	
	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", &u, &v, &c); // u->v cost c
		G[u].push_back( make_pair(v, c) );
	}
	
	for(i = 2; i <= N; i++)
		D[i] = inf;
	
	// dijkstra

	for(i = 1; i <= N-1; i++)
	{
		minim = inf;
		for(j = 1; j <= N; j++)
			if(D[j] < minim && !m[j]) minim = D[j], ind = j;
		m[ind] = 1;
			
		int nr_v = G[ind].size();
		for (j = 0; j < nr_v; j++)
		{
			int v = G[ind][j].first;
			int c = G[ind][j].second;
			if (D[ind] + c < D[v])
				D[v] = D[ind] + c; // relaxare
		}
	}
	
	for (i = 2; i <= N; i++)
		if (D[i] == inf)
			printf("0 ");
		else
			printf("%d ", D[i]);
	printf("\n");
	
	return 0;
}