DSA Shortest Path
Language: Data Structures
import heapq
def dijkstra(graph, start):
distances = {vertex: float("inf") for vertex in graph}
distances[start] = 0
priority_queue = [(0, start)] # (distance, vertex)
while priority_queue:
current_distance, current_vertex = heapq.heappop(priority_queue)
if current_distance > distances[current_vertex]:
continue # a shorter path was already found; skip this stale entry
for neighbor, weight in graph[current_vertex]:
distance = current_distance + weight
if distance < distances[neighbor]:
distances[neighbor] = distance
heapq.heappush(priority_queue, (distance, neighbor))
return distances
graph = {
"A": [("B", 4), ("C", 1)],
"B": [("A", 4), ("D", 1)],
"C": [("A", 1), ("B", 2), ("D", 5)],
"D": [("B", 1), ("C", 5)],
}
print(dijkstra(graph, "A")) # {'A': 0, 'B': 3, 'C': 1, 'D': 4}
Output
Click Run to execute this code.