Cod sursa(job #277340)

Utilizator recviemAlexandru Pana recviem Data 11 martie 2009 17:36:23
Problema Algoritmul lui Dijkstra Scor 90
Compilator cpp Status done
Runda Arhiva educationala Marime 1.06 kb
#include <fstream>
#include <iostream>
#include <queue>
#include <vector>
using namespace std;

typedef struct{
	int to, cost;
} nod;

#define nMax 50001

vector<nod> G[nMax];
int d[nMax];
int n,m;

nod new_nod(int x, int y){
	nod rez;
	rez.to = x, rez.cost = y;
	return rez;
}

void citire(char file[]){
	ifstream fin(file);
	fin >> n >> m;
	for (int i=0;i<m;i++){
		int a, b, c;
		fin >> a >> b >> c;
		G[a-1].push_back(new_nod(b-1,c));
	}
}

void solve(int root, int d[]){
	int v[nMax];
	for (int i=0;i<n;i++)
		v[i] = 0, d[i] = int(2e9);
	d[root] = 0;

	queue<int> q;
	q.push(root);
	while (!q.empty()){
		int a = q.front();
		q.pop();
		v[a] = 0;
		for (vector<nod>::iterator it = G[a].begin(); it!=G[a].end(); it++){
			int b = (*it).to, c = (*it).cost;
			if (d[a] + c < d[b]){
				d[b] = d[a] + c;
				if (!v[b])
					q.push(b), v[b] = 1;
			}
		}
	}
}

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

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