#include <iostream>
#include <vector>
#include <queue>
#include <climits>
using namespace std;
void dijkstra(int start, vector<vector<pair<int, int>>> &graph) {
int n = graph.size();
vector<int> distance(n, INT_MAX); // Najkrótsze odległości
distance[start] = 0;
priority_queue<pair<int, int>, vector<pair<int, int>>, greater<>> pq; // Min-kolejka
pq.push({0, start});
while (!pq.empty()) {
int dist = pq.top().first;
int node = pq.top().second;
pq.pop();
if (dist > distance[node]) continue;
for (auto &neighbor : graph[node]) {
int nextNode = neighbor.first;
int weight = neighbor.second;
if (distance[node] + weight < distance[nextNode]) {
distance[nextNode] = distance[node] + weight;
pq.push({distance[nextNode], nextNode});
}
}
}
// Wyświetlanie wyników
for (int i = 0; i < n; i++) {
if (distance[i] == INT_MAX)
cout << "Wierzchołek " << i << ": brak ścieżki" << endl;
else
cout << "Wierzchołek " << i << ": " << distance[i] << endl;
}
}
int main() {
int n = 6; // Liczba wierzchołków
vector<vector<pair<int, int>>> graph(n);
// Dodawanie krawędzi (wierzchołek, waga)
graph[0].push_back({1, 4});
graph[0].push_back({2, 1});
graph[2].push_back({1, 2});
graph[1].push_back({3, 1});
graph[2].push_back({3, 5});
graph[3].push_back({4, 3});
graph[4].push_back({5, 2});
int start = 0; // Wierzchołek startowy
dijkstra(start, graph);
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8cXVldWU+CiNpbmNsdWRlIDxjbGltaXRzPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnZvaWQgZGlqa3N0cmEoaW50IHN0YXJ0LCB2ZWN0b3I8dmVjdG9yPHBhaXI8aW50LCBpbnQ+Pj4gJmdyYXBoKSB7CiAgICBpbnQgbiA9IGdyYXBoLnNpemUoKTsKICAgIHZlY3RvcjxpbnQ+IGRpc3RhbmNlKG4sIElOVF9NQVgpOyAvLyBOYWprcsOzdHN6ZSBvZGxlZ8WCb8WbY2kKICAgIGRpc3RhbmNlW3N0YXJ0XSA9IDA7CgogICAgcHJpb3JpdHlfcXVldWU8cGFpcjxpbnQsIGludD4sIHZlY3RvcjxwYWlyPGludCwgaW50Pj4sIGdyZWF0ZXI8Pj4gcHE7IC8vIE1pbi1rb2xlamthCiAgICBwcS5wdXNoKHswLCBzdGFydH0pOwoKICAgIHdoaWxlICghcHEuZW1wdHkoKSkgewogICAgICAgIGludCBkaXN0ID0gcHEudG9wKCkuZmlyc3Q7CiAgICAgICAgaW50IG5vZGUgPSBwcS50b3AoKS5zZWNvbmQ7CiAgICAgICAgcHEucG9wKCk7CgogICAgICAgIGlmIChkaXN0ID4gZGlzdGFuY2Vbbm9kZV0pIGNvbnRpbnVlOwoKICAgICAgICBmb3IgKGF1dG8gJm5laWdoYm9yIDogZ3JhcGhbbm9kZV0pIHsKICAgICAgICAgICAgaW50IG5leHROb2RlID0gbmVpZ2hib3IuZmlyc3Q7CiAgICAgICAgICAgIGludCB3ZWlnaHQgPSBuZWlnaGJvci5zZWNvbmQ7CgogICAgICAgICAgICBpZiAoZGlzdGFuY2Vbbm9kZV0gKyB3ZWlnaHQgPCBkaXN0YW5jZVtuZXh0Tm9kZV0pIHsKICAgICAgICAgICAgICAgIGRpc3RhbmNlW25leHROb2RlXSA9IGRpc3RhbmNlW25vZGVdICsgd2VpZ2h0OwogICAgICAgICAgICAgICAgcHEucHVzaCh7ZGlzdGFuY2VbbmV4dE5vZGVdLCBuZXh0Tm9kZX0pOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIC8vIFd5xZt3aWV0bGFuaWUgd3luaWvDs3cKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgaSsrKSB7CiAgICAgICAgaWYgKGRpc3RhbmNlW2ldID09IElOVF9NQVgpCiAgICAgICAgICAgIGNvdXQgPDwgIldpZXJ6Y2hvxYJlayAiIDw8IGkgPDwgIjogYnJhayDFm2NpZcW8a2kiIDw8IGVuZGw7CiAgICAgICAgZWxzZQogICAgICAgICAgICBjb3V0IDw8ICJXaWVyemNob8WCZWsgIiA8PCBpIDw8ICI6ICIgPDwgZGlzdGFuY2VbaV0gPDwgZW5kbDsKICAgIH0KfQoKaW50IG1haW4oKSB7CiAgICBpbnQgbiA9IDY7IC8vIExpY3piYSB3aWVyemNob8WCa8OzdwogICAgdmVjdG9yPHZlY3RvcjxwYWlyPGludCwgaW50Pj4+IGdyYXBoKG4pOwoKICAgIC8vIERvZGF3YW5pZSBrcmF3xJlkemkgKHdpZXJ6Y2hvxYJlaywgd2FnYSkKICAgIGdyYXBoWzBdLnB1c2hfYmFjayh7MSwgNH0pOwogICAgZ3JhcGhbMF0ucHVzaF9iYWNrKHsyLCAxfSk7CiAgICBncmFwaFsyXS5wdXNoX2JhY2soezEsIDJ9KTsKICAgIGdyYXBoWzFdLnB1c2hfYmFjayh7MywgMX0pOwogICAgZ3JhcGhbMl0ucHVzaF9iYWNrKHszLCA1fSk7CiAgICBncmFwaFszXS5wdXNoX2JhY2soezQsIDN9KTsKICAgIGdyYXBoWzRdLnB1c2hfYmFjayh7NSwgMn0pOwoKICAgIGludCBzdGFydCA9IDA7IC8vIFdpZXJ6Y2hvxYJlayBzdGFydG93eQogICAgZGlqa3N0cmEoc3RhcnQsIGdyYXBoKTsKCiAgICByZXR1cm4gMDsKfQo=