Cod sursa(job #2799755)

Utilizator sireanu_vladSireanu Vlad sireanu_vlad Data 13 noiembrie 2021 13:40:20
Problema Algoritmul lui Dijkstra Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.88 kb
#include <fstream>
#include <iostream>
#include <vector>
using namespace std;

ifstream in("dijkstra.in");
ofstream out("dijkstra.out");

const int oo = 20001;
int n, m, d[50001];
bool f[50001];
struct elem {int id, cost;};
vector<elem> g[50001];

void read()
{
	in >> n >> m;
	int x, y, c;
	for(int i = 0; i < m; ++i)
		in >> x >> y >> c,
		g[x].push_back({y, c}),
		g[y].push_back({x, c});
	for(int i = 2; i <= n; ++i)
		d[i] = oo;
}

void dijkstra()
{
	int nod, Min;
	for(int i = 1; i <= n; ++i)
	{
		Min = oo;
		for(int j = 1; j <= n; ++j)
			if(d[j] < Min && f[j] == 0)
				Min = d[j],
				nod = j;
		f[nod] = 1;
		for(auto j : g[nod])
		{
			d[j.id] = min(d[j.id], d[nod] + j.cost);
		}
	}
}

void afis()
{
	for(int i = 2; i <= n; ++i)
		out << (d[i] != oo ? d[i] : 0) << ' ';
}

int main()
{
	read();
	dijkstra();
	afis();
	return 0;
}