Cod sursa(job #3326327)

Utilizator iStefan703Bordei Stefan iStefan703 Data 28 noiembrie 2025 09:46:38
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.23 kb
#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<<" ";
}