git-subtree-dir: users/wpcarro git-subtree-mainline:464bbcb15cgit-subtree-split:24f5a642afChange-Id: I6105b3762b79126b3488359c95978cadb3efa789
		
			
				
	
	
		
			26 lines
		
	
	
	
		
			711 B
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			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.")
 |