{ nodes: [{id, x, y, label}], edges: [{from, to, weight}], source: number }
1function Dijkstra(graph, source):2 dist[source] = 03 PQ.insert(source, 0)4 while PQ is not empty:5 u = PQ.extractMin()6 if u is visited: continue7 mark u as visited8 for each neighbor v of u:9 if dist[u] + weight(u,v) < dist[v]:10 dist[v] = dist[u] + weight(u,v)11 PQ.insert(v, dist[v])12 return dist
1function dijkstra(adj: Map<number, [number, number][]>, src: number) {2 const dist = new Map<number, number>();3 const pq: [number, number][] = [[0, src]];4 dist.set(src, 0);56 while (pq.length) {7 pq.sort((a, b) => a[0] - b[0]);8 const [d, u] = pq.shift()!;9 if (d > (dist.get(u) ?? Infinity)) continue;1011 for (const [v, w] of adj.get(u) ?? []) {12 const nd = d + w;13 if (nd < (dist.get(v) ?? Infinity)) {14 dist.set(v, nd);15 pq.push([nd, v]);16 }17 }18 }19 return dist;20}