Skip to content

Commit 000ce9a

Browse files
committed
dijkstra
1 parent b4ceccd commit 000ce9a

File tree

1 file changed

+55
-0
lines changed

1 file changed

+55
-0
lines changed

graphs/lb-09-dijkstra.cpp

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
int find_min(vector<int> &distance, int n, vector<int> &visited) {
2+
int mn = INT_MAX;
3+
int index = 0;
4+
for (int i = 0; i < n; i++) {
5+
if (!visited[i] and mn >= distance[i]) {
6+
mn = distance[i];
7+
index = i;
8+
}
9+
}
10+
return index;
11+
}
12+
vector<int> dijkstra(int n, vector<vector<int>> adj[], int S) {
13+
vector<int> distance(n, INT_MAX);
14+
vector<int> visited(n, 0);
15+
16+
distance[S] = 0;
17+
for (int i = 0; i < n - 1; i++) {
18+
int min_dist_node = find_min(distance, n, visited);
19+
visited[min_dist_node] = 1;
20+
for (auto x : adj[min_dist_node]) {
21+
int nei = x[0];
22+
int dist = x[1];
23+
if (!visited[nei] and distance[min_dist_node] != INT_MAX) {
24+
distance[nei] = min(distance[nei], distance[min_dist_node] + dist);
25+
}
26+
}
27+
}
28+
return distance;
29+
}
30+
31+
// QUEUE method
32+
33+
vector<int> dijkstra(int n, vector<pair<int, int>> adj[], int src) {
34+
// Array of vectors of pairs
35+
// pair = (destination, cost)
36+
// min-heap {dist, node}
37+
priority_queue<pair<int, int>, vector<pair<int, int>>, greater<pair<int, int>>> pq;
38+
vector<int> distance(n + 1, INT_MAX);
39+
distance[src] = 0;
40+
pq.push({0, src});
41+
while (pq.size()) {
42+
int dist = pq.top().first;
43+
int curr = pq.top().second;
44+
pq.pop();
45+
for (auto pr : adj[curr]) {
46+
int neigh = pr.first;
47+
int edge_cost = pr.second;
48+
if (distance[neigh] > distance[curr] + edge_cost) {
49+
distance[neigh] = distance[curr] + edge_cost;
50+
pq.push({distance[neigh], neigh});
51+
}
52+
}
53+
}
54+
return distance;
55+
}

0 commit comments

Comments
 (0)