Practice dijkstra's algorithm

Getting some practice with Python's heapq module (which I'm unsure if I used
correctly) to do a priority-first-traversal of a graph: known as Dijkstra's
algorithm.
This commit is contained in:
William Carroll 2020-01-22 11:07:07 +00:00
parent 91811236a5
commit c010e6d6cf

26
deepmind/dijkstra.py Normal file
View file

@ -0,0 +1,26 @@
# Doing a practice implementation of Dijkstra's algorithm: a priority-first
# search.
from heapq import heappush, heappop
class Node(object):
def __init__(self, value, children):
self.value = value
self.children = children
def shortest_path(a, b):
"""Return the shortest path from `a` to `b`."""
q = []
seen = set()
heappush((a.value, a, [a]), q)
while q:
d, node, path = heappop(q)
if node == b:
return path
seen.add(node)
for child in node.children:
if child not in seen:
heappush((d + child.value, child, path + [child]), q)
raise Exception("Path between nodes A and B does not exist.")