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