Dijkstra's Algorithm for shortest path?
int[] Dijkstra(Dictionary<int, List<(int neighbor, int weight)>>
graph, int source, int vertices) {
int[] dist = new int[vertices];
for (int i = 0; i < vertices; i++) dist[i] = int.MaxValue;
dist[source] = 0;
var pq = new SortedSet<(int dist, int node)>();
pq.Add((0, source));
while (pq.Count > 0) {
var current = pq.Min;
pq.Remove(current);
int u = current.node;
foreach (var (v, w) in graph[u]) {
if (dist[u] + w < dist[v]) {
if (dist[v] != int.MaxValue)
pq.Remove((dist[v], v));
dist[v] = dist[u] + w;
pq.Add((dist[v], v));
return dist;
Explanation:
Uses a priority queue to pick node with min dist; relax edges.