27 lines
726 B
Python
27 lines
726 B
Python
import heapq
|
|
|
|
|
|
def dijkstra(graph, start):
|
|
dist = {v: float("inf") for v in graph}
|
|
dist[start] = 0
|
|
pq = [(0, start)]
|
|
while pq:
|
|
d, v = heapq.heappop(pq)
|
|
if d > dist[v]:
|
|
continue
|
|
for u, w in graph[v]:
|
|
if dist[v] + w < dist[u]:
|
|
dist[u] = dist[v] + w
|
|
heapq.heappush(pq, (dist[u], u))
|
|
return dist
|
|
|
|
|
|
if __name__ == "__main__":
|
|
graph = {
|
|
"Невский": [("Лиговский", 5), ("Гороховая", 3)],
|
|
"Лиговский": [("Московский", 7)],
|
|
"Гороховая": [("Московский", 4)],
|
|
"Московский": [],
|
|
}
|
|
print(dijkstra(graph, "Невский"))
|