


# def dijkstra(G, v):
#     final_dist = {}
#     distance_so_far = {v: [0, v] }
#     frontier = [ [0, v] ]

#     while len(frontier) < len(G):
#         while True:
#             w = heapq.pop(frontier)
#             node = value
#             dist =

#             if not removed:
#                 break
#         for x in G[node]:
#             if x not in final_dist:
#                 unpace
#                 new_dist =
#                 if x not in distance_so_far:
#                     distance_so_far[x] =
#                     add to dictionary
#                     G[x][dist] = dist + G[node][x]
#                 elif new_dist < val(dist_so_far(x):
#                     same as above


