Pagini recente » Cod sursa (job #3328173) | Cod sursa (job #904824) | Cod sursa (job #2854866) | Cod sursa (job #2003471) | Cod sursa (job #3323290)
#include <fstream>
#include <queue>
#include <algorithm>
#define infinit 1e9
using namespace std;
ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");
int n, m;
vector<vector<pair<int, int>>> adj;
vector<int> Dijkstra(int s ){
priority_queue<pair<int, int>, vector<pair<int, int>>, greater<pair<int, int>>> q;
vector<int> d(n+1, infinit), tata(n+1, 0), viz(n+1, 0);
d[s] = 0;
q.push({d[s], s});
while(!q.empty()){
pair<int, int> p = q.top();
q.pop();
if (viz[p.second]==1) continue; //ignoram nodurile care au mai fost deja vizitate, acum sunt extrase copii ale lor cu etichete mai mari
viz[p.second] = 1;
for(auto &nod : adj[p.second]){
int vf = nod.first;
int cost = nod.second;
if(d[vf] > d[p.second]+cost && !viz[vf]){
tata[vf] = p.second;
d[vf] = d[p.second]+cost;
q.push({d[vf], vf});
}
}
}
return d;
}
int main(){
fin>>n>>m;
adj.resize(n+1);
while(m--){
int x, y, cost;
fin>>x>>y>>cost;
adj[x].push_back({y, cost});
}
int cost = 0;
vector<int> dist=Dijkstra(1 );
for(int v=2;v<=n;v++)
if(dist[v]==infinit)
fout<<"0 ";
else
fout<<dist[v]<<" ";
fout.close();
return 0;
}