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))
 |