#include #include #include #include #include using namespace std; void print(vector tab) { for (int el : tab) cout << el << " "; cout << endl; } void dijkstra(vector>> &adjw, vector &d, vector &prev, vector &prov, int n) { int start = 0; prov[start] = 0; d[start] = 0; prev[start] = -1; while (1) { int x = -1; for (int y = 0; y < n; y++) { if (prov[y] > -1) { if (x == -1 || prov[y] < prov[x]) { x = y; } } } if (x == -1) break; d[x] = prov[x]; prov[x] = -2; for (auto[y, w] : adjw[x]) { if (prov[y] == -1 || prov[y] > -1 && d[x] + w < prov[y]) { prov[y] = d[x] + w; prev[y] = x; } } } } int main() { vector>> adjw = {{{1, 8}, {2, 12}}, {{2, 13}, {3, 25}}, {{6, 21}, {3, 14}}, {{6, 12}, {8, 16}, {7, 12}, {5, 8}, {4, 20}}, {{1, 9}, {5, 19}}, {{7, 11}}, {{8, 11}}, {{8, 9}}, {}}; int n = adjw.size(); vector d(n, -1); vector prev(n, -1); vector prov(n, -1); dijkstra(adjw, d, prev, prov, n); print(d); print(prev); }