Cod sursa(job #3215539)

Utilizator AndreasBossGamerBaragau Andreas AndreasBossGamer Data 15 martie 2024 09:37:45
Problema Algoritmul lui Dijkstra Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.42 kb
#include <fstream>
#include <queue>
#include <vector>

using namespace std;

ifstream cin("dijkstra.in");
ofstream cout("dijkstra.out");

int n, m;

struct queueue {
    int distanta, nod;

    bool operator<(const queueue& temp) const {
        return distanta > temp.distanta;
    }
};

struct ceva {
    int nod, cost;
};

priority_queue<queueue> q;
vector<vector<ceva>> adj;
int costMinim[10001];

void distra(int startingNode) {
    for (int i = 1; i <= n; i++) costMinim[i] = 2147483647;

    q.push({ 0, startingNode });
    costMinim[startingNode] = 0;

    while (!q.empty())
    {
        queueue nodCurent = q.top();
        for (ceva vecinCurent : adj[nodCurent.nod])
        {
            if (costMinim[vecinCurent.nod] > costMinim[nodCurent.nod] + vecinCurent.cost) {
                costMinim[vecinCurent.nod] = costMinim[nodCurent.nod] + vecinCurent.cost;
                //cout<<nodCurent.distanta<<" " << nodCurent.nod << " " << vecinCurent.nod << " " << costMinim[vecinCurent.nod] << "\n";
                q.push({ costMinim[vecinCurent.nod], vecinCurent.nod});
            }
        }
        q.pop();
    }
}

int main()
{
    cin >> n >> m;
    adj.resize(n + 1);
    for (int i = 0; i < m; i++) {
        int x, y, cost;
        cin >> x >> y >> cost;
        adj[x].push_back({ y, cost });
    }

    distra(1);
    for(int i = 2; i<=n;i++) cout<<costMinim[i]<<" ";
}