Pagini recente » Profil mihaiextreme | Rating Razvan Vilceanu (Arthurelul) | Cod sursa (job #141091) | Monitorul de evaluare | Cod sursa (job #3268519)
#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;
}