Cod sursa(job #3268519)

Utilizator Anamaria240Rusu Ana-Maria Anamaria240 Data 15 ianuarie 2025 18:41:30
Problema Algoritmul lui Dijkstra Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.38 kb
#include<fstream>
#include<iostream>
#include <list>
#include <vector>
#include<set>
#include<climits>
using namespace std;
 

int main()
{
	int n,m;
	ifstream fin("dijkstra.in");
	fin >> n >> m;
	vector<int>d, t;
	vector<list<pair<int, int> > > L;// lista de vecini; Ex: L[3]={7,4} -> nodul 3 il are vecin pe 4 prin o muchie de cost 7
	L.resize(n + 1); d.resize(n + 1); t.resize(n + 1);
	for (int i = 1; i <= n; i++)
		t[i] = 0, d[i] = INT_MAX;

	for (int i = 0; i < m; i++)
	{
		int x, y, w;
		fin >> x >> y >> w;
		L[x].push_back({ w,y });
		//L[y].push_back({w,x});


	}

	set<pair<int, int> > Q;

	int start = 1;

	Q.insert({ 0,start });
	d[start] = 0; t[start] = 0;

	while (!Q.empty())
	{
		int nod = Q.begin()->second; //referentiez primul nod din coada 
		Q.erase({ d[nod],nod });//Q.erase(*Q.begin()); /sterg primul nod din coada
		for (auto p : L[nod])//parcurg vecinii nodului
		{
			int x = p.second;//retin eticheta vecinului
			int w = p.first;//retin ponderea arcului de la nod la vecin
			if (d[x] > d[nod] + w)//relaxez actul de la nod la vecin
			{
				Q.erase({ d[x],x });
				d[x] = d[nod] + w;
				t[x] = nod;
				Q.insert({ d[x],x });
			}
		}
	}
	ofstream fout("dijkstra.out");
	for (int i = 2; i <= n; i++)
	{
		if (d[i] < INT_MAX)
			fout << d[i] << " ";
		else fout << 0 << " ";
	}



	fin.close();
	return 0;


}