Pagini recente » Cod sursa (job #333261) | Cod sursa (job #64051) | Monitorul de evaluare | Cod sursa (job #325905) | Cod sursa (job #3326327)
#include<fstream>
#include<queue>
#include<vector>
#include<climits>
using namespace std;
ifstream f("dijkstra.in");
ofstream g("dijkstra.out");
vector<int> Dijkstra(vector<vector<pair<int,int>>>& adj, int src) {
int V=adj.size();
priority_queue<pair<int, int>, vector<pair<int, int>>, greater<pair<int, int>>> pq;
vector<int> dist(V, INT_MAX);
dist[src] = 0;
pq.emplace(0, src);
while (!pq.empty()) {
auto top = pq.top();
pq.pop();
int d = top.first;
int u = top.second;
if (d > dist[u])
continue;
for (auto &p : adj[u]) {
int v = p.first;
int w = p.second;
if (dist[u] + w < dist[v]) {
dist[v] = dist[u] + w;
pq.emplace(dist[v], v);
}
}
}
return dist;
}
int main()
{
int n,nod,x,y,greutate;
f>>n>>nod;
vector<vector<pair<int,int>>>adj(n+1);
while(f>>x>>y>>greutate)
{
adj[x].push_back(make_pair(y,greutate));
}
vector<int>rezultat=Dijkstra(adj,nod);
for(int i=1;i<rezultat.size();i++)
if(rezultat.at(i)!=INT_MAX)
g<<rezultat.at(i)<<" ";
else g<<-1<<" ";
}