Cod sursa(job #277486)

Utilizator recviemAlexandru Pana recviem Data 11 martie 2009 19:16:04
Problema Algoritmul lui Dijkstra Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.81 kb
#include <fstream>
#include <iostream>
using namespace std;

typedef struct{
	int x, y, c;
} muchie;

#define nMax 250001
#define inf 0x3f3f3f3f
#define root 1

muchie G[nMax];
int d[nMax];
int n,m;

void citire(char file[]){
	ifstream fin(file);
	fin >> n >> m;
	for (int i=0;i<=n;i++)
		d[i] = inf;

	d[root] = 0;
	for (int i=0;i<m;i++){
		fin >> G[i].x >> G[i].y >> G[i].c;
		if ( G[i].x == root)
			d[G[i].y] = G[i].c;
	}
}

void solve(){
	int cont = 1;
	while (cont){
		cont = 0;
		for (int i=0;i<m;i++)
			if (d[G[i].y] > d[G[i].x] + G[i].c && G[i].y != root)
				d[G[i].y] = d[G[i].x] + G[i].c, cont = 1;
	}
}

void scriere(char file[]){
	ofstream fout(file);
	for (int i=2;i<=n;i++)
		fout << (d[i] < inf?d[i]:0) << " ";
	fout.close();
}

int main(){
	citire("dijkstra.in");
	solve();
	scriere("dijkstra.out");
	return 0;
}