Cod sursa(job #276130)

Utilizator stefysStefan stefys Data 10 martie 2009 21:26:36
Problema Algoritmul lui Dijkstra Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 1.09 kb
#include <fstream>
#include <cstring>
using namespace std;

struct Nod { Nod *n; unsigned int dest,cost; };

#define INF 0xeeeeeeee

ifstream in("dijkstra.in");
ofstream out("dijkstra.out");
unsigned int N,M;
Nod *graf[50001];

int main ()
{
	in >> N >> M;
	for (unsigned int i=0; i<M; ++i) {
		unsigned int src,dest,cost;
		in >> src >> dest >> cost;
		Nod *nod = new Nod;
		nod->dest = dest;
		nod->cost = cost;
		nod->n = graf[src];
		graf[src] = nod;
	}	
	in.close();
	unsigned int dist[50001];
	char visited[50001]; memset(visited, 0, N+1);
	dist[1] = 0;
	for (unsigned int i=2; i<=N; ++i) dist[i]=INF;
	
	unsigned int crt=1;
	while (crt != INF) {
		visited[crt] = 1;
		for (Nod *nod=graf[crt]; nod; nod=nod->n)
			if (dist[nod->dest] > dist[crt]+nod->cost) dist[nod->dest] = dist[crt]+nod->cost;
		unsigned int min=INF,minvf=INF;
		for (unsigned int i=2; i<=N; ++i) if (!visited[i] && dist[i] < min) { min=dist[i];minvf=i; }
		crt = minvf;
	}
	for (unsigned int i=2; i<=N; ++i) out << ((dist[i]==INF)?0:dist[i]) << ' ';
	out << '\n';
	out.close();
	return 0;
}