Skip to content

Commit 59238cc

Browse files
Add pseudo-code
1 parent 026f667 commit 59238cc

2 files changed

Lines changed: 51 additions & 0 deletions

File tree

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
using Node = int
2+
using Weight = int
3+
using AdjList = unordered_map<Node, vector<pair<Node, Weight>>>
4+
5+
Node source, destination // Given
6+
AdjList adj_list; // Given
7+
unordered_map<Node, Weight> min_distance
8+
priority_queue<pair<Weight, Node>, vector<pair<Weight, Node>>, greater<>> order
9+
10+
for ([u, _] : adj_list) {
11+
min_distance[u] = inf
12+
}
13+
14+
min_distance[source] = 0
15+
order.emplace(0, source)
16+
17+
while (!order.empty()) {
18+
[du, u] = order.top()
19+
order.pop()
20+
21+
if (min_distance[u] < du) {
22+
continue;
23+
}
24+
25+
for ([dv, v] : adj_list[u]) {
26+
if (min_distance[u] + dv < min_distance[v]) {
27+
min_distance[v] = min_distance[u] + dv
28+
order.emplace(min_distance[v], v)
29+
}
30+
}
31+
}
32+
33+
return min_distance[destination]
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
using Node = int
2+
using Weight = int
3+
using Edge = pair<Node, Node>
4+
5+
size_t num_v
6+
vector<pair<Weight, Edge>> edge_list
7+
8+
ranges::sort(edge_list)
9+
UFDS ufds(num_v)
10+
11+
total_weight = 0
12+
for ([weight, edge] : edge_list) {
13+
[u, v] = edge
14+
if (!ufds.IsSameSet(u, v)) {
15+
total_weight += weight
16+
ufds.union(u, v)
17+
}
18+
}

0 commit comments

Comments
 (0)