git-subtree-dir: users/wpcarro git-subtree-mainline:464bbcb15cgit-subtree-split:24f5a642afChange-Id: I6105b3762b79126b3488359c95978cadb3efa789
		
			
				
	
	
		
			40 lines
		
	
	
	
		
			1.2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			40 lines
		
	
	
	
		
			1.2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
from heapq import heappush, heappop
 | 
						|
import random
 | 
						|
 | 
						|
def shortest_path(a, b, graph):
 | 
						|
    seen = set()
 | 
						|
    h = []
 | 
						|
    heappush(h, (0, a, [a]))
 | 
						|
    while h:
 | 
						|
        km, x, path = heappop(h)
 | 
						|
        if x == b:
 | 
						|
            return path
 | 
						|
        for c in graph[x]:
 | 
						|
            if c not in seen:
 | 
						|
                heappush(h, (km + 1, c, path + [c]))
 | 
						|
    raise Exception("We were unable to find a path from {} to {}".format(a, b))
 | 
						|
 | 
						|
graph = {
 | 
						|
    'Min'     : ['William', 'Jayden', 'Omar'],
 | 
						|
    'William' : ['Min', 'Noam'],
 | 
						|
    'Jayden'  : ['Min', 'Amelia', 'Ren', 'Noam'],
 | 
						|
    'Ren'     : ['Jayden', 'Omar'],
 | 
						|
    'Amelia'  : ['Jayden', 'Adam', 'Miguel'],
 | 
						|
    'Adam'    : ['Amelia', 'Miguel', 'Sofia', 'Lucas'],
 | 
						|
    'Miguel'  : ['Amelia', 'Adam', 'Liam', 'Nathan'],
 | 
						|
    'Noam'    : ['Nathan', 'Jayden', 'William'],
 | 
						|
    'Omar'    : ['Ren', 'Min', 'Scott'],
 | 
						|
    'Liam'    : ['Ren'],
 | 
						|
    'Nathan'  : ['Noam'],
 | 
						|
    'Scott'   : [],
 | 
						|
}
 | 
						|
 | 
						|
result = shortest_path('Jayden', 'Adam', graph)
 | 
						|
print(result)
 | 
						|
assert result == ['Jayden', 'Amelia', 'Adam']
 | 
						|
print('Success!')
 | 
						|
 | 
						|
beg = random.choice(list(graph.keys()))
 | 
						|
end = random.choice(list(graph.keys()))
 | 
						|
print("Attempting to find the shortest path between {} and {}".format(beg, end))
 | 
						|
print(shortest_path(beg, end, graph))
 |