Skip to content

Python implementation of Dijkstra's shortest path algorithm

Notifications You must be signed in to change notification settings

joyrexus/dijkstra

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Quick and dirty implementation of Dijkstra's algorithm for finding shortest path distances in a connected graph.

This implementation has a O((m+n) log n) running time, where n is the number of vertices and m is the number of edges. If the graph is connected (i.e. in one piece), m normally dominates over n, making the algorithm O(m log n) overall.

Usage

from dijkstra import dijkstra, shortest_path

The main function takes as arguments a graph structure and a starting vertex.

dist, pred = dijkstra(graph, start='a') 

The graph structure should be a dict of dicts, a mapping of each node v to its successor nodes w and their respective edge weights (v -> w).

graph = {'a': {'b': 1}, 
         'b': {'c': 2, 'b': 5}, 
         'c': {'d': 1},
         'd': {}}

dist, pred = dijkstra(graph, start='a') 

It returns two dicts, dist and pred:

dist is a dict mapping each node to its shortest distance from the specified starting node:

assert dist == {'a': 0, 'c': 3, 'b': 1, 'd': 4}

pred is a dict mapping each node to its predecessor node on the shortest path from the specified starting node:

assert pred == {'b': 'a', 'c': 'b', 'd': 'c'}

The dijkstra function allows us to easily compute shortest paths between two nodes in a graph. The shortest_path function is provided as a convenience:

graph = {'a': {'b': 1}, 
         'b': {'c': 2, 'b': 5}, 
         'c': {'d': 1},
         'd': {}}

assert shortest_path(graph, 'a', 'a') == ['a']
assert shortest_path(graph, 'a', 'b') == ['a', 'b']
assert shortest_path(graph, 'a', 'c') == ['a', 'b', 'c']
assert shortest_path(graph, 'a', 'd') == ['a', 'b', 'c', 'd']

See Also

Other implementations using an indexed priority queue:

About

Python implementation of Dijkstra's shortest path algorithm

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages