tvl-depot/scratch/deepmind/part_one/dijkstra.py
William Carroll fabf1c9334 Tidy up structure of briefcase
I had a spare fifteen minutes and decided that I should tidy up my
monorepo. The work of tidying up is not finished; this is a small step in the
right direction.

TL;DR
- Created a tools directory
- Created a scratch directory (see README.md for more information)
- Added README.md to third_party
- Renamed delete_dotfile_symlinks -> symlinkManager
- Packaged symlinkManager as an executable symlink-mgr using buildGo
2020-02-12 16:58:29 +00:00

26 lines
711 B
Python

# 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.")