그래프에서 한 정점(시작점)으로부터 다른 모든 정점까지의 최단 거리를 구하는 알고리즘
단, 간선의 가중치는 음수가 없어야 함!
네가 서울역에 있다고 가정하 이제 서울역에서 지하철로 가장 빠르게 도착할 수 있는 모든 역까지의 시간을 알고 싶어.
import heapq
def dijkstra(graph, start):
distance = {node: float('inf') for node in graph}
distance[start] = 0 # 시작점 거리 0
queue = [(0, start)] # (거리, 노드)
while queue:
dist, now = heapq.heappop(queue)
# 기존에 더 짧은 경로가 있으면 skip
if dist > distance[now]:
continue
for neighbor, cost in graph[now]:
new_cost = dist + cost
if new_cost < distance[neighbor]:
distance[neighbor] = new_cost
heapq.heappush(queue, (new_cost, neighbor))
return distance
graph = {
'A': [('B', 1), ('C', 4)],
'B': [('A', 1), ('C', 2)],
'C': [('A', 4), ('B', 2)],
}
print(dijkstra(graph, 'A'))
🔽 출력 결과:
{'A': 0, 'B': 1, 'C': 3}
V: 노드 수, E: 간선 수