Cod sursa(job #2710211)

Utilizator teofilotopeniTeofil teofilotopeni Data 22 februarie 2021 10:22:20
Problema Sortare topologica Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.15 kb
#include <iostream>
#include <vector>
#include <list>
using namespace std;

//  Algoritmul lui Dijkstra

struct Nod {
    short val;
    short lg;

    Nod(int v, int l) {
        val = v;
        lg = l;
    }
    operator short() { return val; }
};

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

        for (list<Nod>::iterator it = noduri[index].begin(); it != noduri[index].end(); it++)
            parcurge(*it, distance + it->lg, noduri, minim);
    }
}

int main() {
    freopen("dijkstra.in", "r", stdin);
    freopen("dijkstra.out", "w", stdout);
    short n, x, y, lg;
    int m;
    cin >> n >> m;
    vector<list<Nod>> noduri(n + 1);
    vector<int> minim(n + 1, -1);
    while (m--) {
        cin >> x >> y >> lg;
        noduri[x].push_back(Nod(y, lg));
        noduri[y].push_back(Nod(x, lg));
    }
    for (x = 1; x <= n; x++)
        noduri[x].sort();

    parcurge(1, 0, noduri, minim);

    for (x = 2; x < minim.size(); x++)
        cout << minim[x] << ' ';
    return 0;
}