Cod sursa(job #2711162)

Utilizator teofilotopeniTeofil teofilotopeni Data 23 februarie 2021 18:42:47
Problema Algoritmul lui Dijkstra Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.15 kb
#include <iostream>
#include <algorithm>
#include <vector>
#include <queue>
using namespace std;

//  Algoritmul lui Dijkstra

struct Nod {
    int val;
    int lg;

    Nod(int v, int l) {
        val = v;
        lg = l;
    }
    bool operator <(const Nod& n) const {
        return n.lg < lg;
    }
};

void parcurge(int index, int distance, vector<priority_queue<Nod>> &noduri, vector<int> &minim) {
    if (minim[index] < 0 || distance < minim[index]) {
        minim[index] = distance;

        for (priority_queue<Nod> nd = noduri[index]; nd.size(); nd.pop())
            parcurge(nd.top().val, distance + nd.top().lg, noduri, minim);
    }
}

int main() {
    freopen("dijkstra.in", "r", stdin);
    freopen("dijkstra.out", "w", stdout);
    int n, m, x, y, lg;
    scanf("%d %d", &n, &m);
    vector<priority_queue<Nod>> noduri(n + 1);
    vector<int> minim(n + 1, -1);
    while (m--) {
        scanf("%d %d %d", &x, &y, &lg);
        noduri[x].push(Nod(y, lg));
        noduri[y].push(Nod(x, lg));
    }
    parcurge(1, 0, noduri, minim);

    for (x = 2; x <= n; x++)
        printf("%d ", minim[x]);
    return 0;
}