Published
Edited
Feb 15, 2019
4 forks
9 stars
Insert cell
Insert cell
Insert cell
Insert cell
function dijkstra(pts) { // The unvisited set
const Q = new Set();
const dist = new Map();
const prev = new Map();
const prevEdge = new Map();
pts.forEach(pt => {
dist.set(pt, Infinity);
prev.set(pt, undefined);
Q.add(pt);
});
dist.set(pts[0], 0);
while (Q.size) {
// Find the node with least distance.
let u, minDistance = Infinity;
for (const candidate of Q) {
if (dist.get(candidate) < minDistance) {
minDistance = dist.get(candidate);
u = candidate;
}
}
// Remove it from the visited queue.
Q.delete(u);
for (const edge of u.edges) {
const v = edge.source === u ? edge.target : edge.source;
const alt = dist.get(u) + edge.distance;
if (alt < dist.get(v)) {
dist.set(v, alt);
prev.set(v, u);
prevEdge.set(v, edge);
}
}
}
return {dist, prev, prevEdge};
}
Insert cell
Insert cell

Purpose-built for displays of data

Observable is your go-to platform for exploring data and creating expressive data visualizations. Use reactive JavaScript notebooks for prototyping and a collaborative canvas for visual data exploration and dashboard creation.
Learn more