summaryrefslogtreecommitdiff
path: root/content/graph/dijkstra.cpp
diff options
context:
space:
mode:
authorGloria Mundi <gloria@gloria-mundi.eu>2024-11-16 01:24:14 +0100
committerGloria Mundi <gloria@gloria-mundi.eu>2024-11-16 01:24:14 +0100
commit98567ec798aa8ca2cfbcb85c774dd470f30e30d4 (patch)
tree5113d5cc24d1ad5f93810b6442ce584a36950dc8 /content/graph/dijkstra.cpp
parentad3856a6b766087df0036de0b556f4700a6498c9 (diff)
parent8d11c6c8213f46f0fa19826917c255edd5d43cb1 (diff)
mzuenni tests
Diffstat (limited to 'content/graph/dijkstra.cpp')
-rw-r--r--content/graph/dijkstra.cpp21
1 files changed, 21 insertions, 0 deletions
diff --git a/content/graph/dijkstra.cpp b/content/graph/dijkstra.cpp
new file mode 100644
index 0000000..61c636d
--- /dev/null
+++ b/content/graph/dijkstra.cpp
@@ -0,0 +1,21 @@
+using path = pair<ll, int>; //dist, destination
+
+auto dijkstra(const vector<vector<path>>& adj, int start) {
+ priority_queue<path, vector<path>, greater<path>> pq;
+ vector<ll> dist(sz(adj), INF);
+ vector<int> prev(sz(adj), -1);
+ dist[start] = 0; pq.emplace(0, start);
+
+ while (!pq.empty()) {
+ auto [dv, v] = pq.top(); pq.pop();
+ if (dv > dist[v]) continue; // WICHTIG!
+
+ for (auto [du, u] : adj[v]) {
+ ll newDist = dv + du;
+ if (newDist < dist[u]) {
+ dist[u] = newDist;
+ prev[u] = v;
+ pq.emplace(dist[u], u);
+ }}}
+ return dist; //return prev;
+}