728x90
반응형
정의
특정한 정점으로부터 다른 모든 정점으로 가는 최단 경로를 구하는 알고리즘이다.
음의 간선은 포함시킬 수 없다.
활용
현실 생활에서 많이 사용되는 알고리즘으로 인공위성 GPS 등이 있다.
코드
시간 복잡도 O(N * log N)를 가지는 코드이다.
import heapq
import math
def dijkstra(graph, start):
distances = {node : math.inf for node in graph}
distances[start] = 0
queue = []
heapq.heappush(queue, [distances[start], start])
while queue:
curr_distance, curr_dest = heapq.heappop(queue)
if distances[curr_dest] < curr_distance:
continue
for new_dest, new_distance in graph[curr_dest].items():
distance = curr_distance + new_distance
if distance < distances[new_dest]:
distances[new_dest] = distance
heapq.heappush(queue, [distances[new_dest], new_dest])
return distances
_graph = {
'A': {'B': 8, 'C': 1, 'D': 2},
'B': {},
'C': {'B': 5, 'D': 2},
'D': {'E': 3, 'F': 5},
'E': {'F': 1 },
'F': {'A': 5 }
}
dijkstra(_graph, 'A')
728x90
반응형
'알고리즘 > 최단경로' 카테고리의 다른 글
[알고리즘] 플로이드 와샬 알고리즘 (0) | 2021.10.24 |
---|