Dijkstra
g- Expanded
- 0
- Optimal
- Guaranteed
Run real graph searches step by step. Inspect every decision. Compare what each algorithm explores—and what it misses.
Intersections become nodes. Roads become directed edges. Distance, time, tolls, and safety become costs the algorithm can reason about.
Intersections become nodes; roads become connections.
The shortest route may not be the fastest. Change the objective and the same graph tells a different story.
A longer arterial avoids slow blocks.
Dijkstra knows cost. A* adds direction. Greedy follows its intuition. Watch their frontiers diverge on the exact same graph.
Open synchronized Compare Modegg + hhEach semantic trace event maps to the meaningful source lines—without pretending every language works the same way.
12const frontier = new MinHeap([start]);13while (!frontier.isEmpty()) {14 const current = frontier.pop()!;15 for (const edge of graph.outgoing(current.id)) {16 const candidate = distances[current.id] + edge.weight;17 if (candidate < distances[edge.toId]) relax(edge, candidate);Every scenario is deterministic, purpose-built, and replayable. Closures, one-way streets, negative edges, and unreachable goals expose different guarantees.
Equal weights · many ties
Algorithms emit deterministic semantic events. The interface replays them forward, backward, or at any point in time.
Same graph and seed, same event stream—every time.
Known paths, costs, negative cycles, and edge cases are tested.
Strict schemas, finite limits, and plain-text labels. No executable input.
Keyboard playback, live descriptions, reduced motion, and tabular graph data.
Pause at any decision, inspect the frontier, then rewind and try another algorithm on the same world.
Launch RouteLab