Cod sursa(job #2749009)

Utilizator muiepulicimatacutactu muiepulici Data 4 mai 2021 17:22:45
Problema Algoritmul lui Dijkstra Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.02 kb
#include <fstream>
#include <vector>

int N;
std::vector<std::pair<int, int>> G[50001];

#define INFINITY 2147483647

int d[10];
int v[10];

void dijkstra(int s) {
	int i;

	for (i = 1; i <= N; ++i)
		d[i] = INFINITY;

	for (auto& nod : G[s])
		d[nod.first] = nod.second;

	d[s] = 0;
	v[s] = 1;

	int min;
	d[0] = INFINITY;

	for (int k = 1; k <= N; ++k) {
		min = 0;

		for (i = 1; i <= N; ++i) {
			if (v[i] == 0 && d[i] < d[min])
				min = i;
		}

		if (min != 0) {
			v[min] = 1;

			for (auto& nod : G[min]) {
				if (v[nod.first] == 0 && d[nod.first] > d[min] + nod.second)
					d[nod.first] = d[min] + nod.second;
			}
		}
	}
}

int main() {
	std::ifstream fin("dijkstra.in");
	std::ofstream fout("dijkstra.out");

	int M;

	fin >> N >> M;

	int A, B, C;

	for (int i = 1; i <= M; ++i) {
		fin >> A >> B >> C;

		G[A].push_back({ B, C });
	}

	fin.close();

	dijkstra(1);

	for (int i = 2; i <= N; ++i)
		fout << d[i] << ' ';
	fout << '\n';

	fout.close();

	return 0;
}