Pagini recente » Profil mihaistamatescu | Cod sursa (job #2902956) | Profil mihaistamatescu | Cod sursa (job #2071728) | Cod sursa (job #3207079)
#include <bits/stdc++.h>
#include <fstream>
using namespace std;
const string fileName = "dijkstra";
ifstream in (fileName + ".in");
ofstream out (fileName + ".out");
int n, m;
class Compare {
public:
bool operator()(pair<int,int> a, pair<int,int> b){
if(a.second > b.second){
return true;
}
return false;
}
};
priority_queue <pair<int, int>, vector<pair<int, int>>, Compare> q;/// queue specific bfs care implementeaza prioritatea cozii in functie de drumul cel mai scurt (ceea ce caut in pb)
vector<pair<int, int>> v[50001];
int dist[50001];
int dijkstra(int start){
int viz[50001];
for(int i = 0; i <= n; i ++){
dist[i] = 2147483647;
}
q.push({start, 0});
int it = 0;
while(!q.empty() && it < m * log(n)){
pair<int,int> c = q.top();
q.pop();
if(!viz[c.first]){ ///prima vizitare are costul minim intotdeauna din organizarea cozii
int poz = c.first;
int cost = c.second;
if(dist[poz] > cost){
dist[poz] = cost;
}
for(pair<int, int> i : v[poz]){
if(dist[i.first] > dist[poz] + i.second){
dist[i.first] = dist[poz] + i.second;
q.push({i.first, dist[poz] + i.second});
}
}
}
it ++;
}
}
int main()
{
in >> n >> m;
for(int i = 0; i < m ; i ++){
int a, b, c;
in >> a >> b >> c;
v[a].push_back({b, c});
}
dijkstra(1);
for(int i = 1; i <= n; i ++){
out << i << " | " << dist[i] << endl;
}
return 0;
}