다익스트라 알고리즘

다익스트라 알고리즘 동작 원리

Untitled

다익스트라 알고리즘 과정

  1. 출발 노드를 설정하고 최단 거리 테이블을 초기화한다.
  2. 현재 위치한 노드의 인접 노드 중 방문하지 않은 노드를 구별하고, 방문하지 않은 노드 중 거리가 가장 짧은 노드를 선택한다. (선택한 노드는 방문 처리한다.)
  3. 해당 노드를 거쳐 다른 노드로 넘어가는 거리를 계산해서 최단 거리 테이블을 업데이트 한다.
  4. (2) ~ (3) 과정을 반복한다.

다익스트라 구현 코드

import collections
import sys
import heapq

input = sys.stdin.readline

V, E = map(int, input().split()) # 노드, 간선 수 입력 받기
graph = [[] for _ in range(n + 1)]

for _ in range(V):
    u, v, w = map(int, input().split())
    graph[u].append(v,w) # 그래프 생성

# 다익스트라 알고리즘
def dijkstra(graph, start):
    Q = [(0, start)] # 우선순위 큐생성 (거리, 정점)
    distance = collections.defaultdict(int) # 거리 정보를 담을 자료구조 생성
		distance = [INF] * (n + 1)

    while Q:
        dist, node = heapq.heappop(Q) # 힙 추출
        if node not in distance: # 방문한 노드가 아니면 거리 정보 저장
            distance[node] = dist
            for v, w in graph[node]: # 인점 노드 탐색
                update = dist + w # 거리 정보 갱신
                heapq.heappush(Q, [update, v]) # 우선 순위 큐에 삽입

    # 최단 경로 존재 여부 판별, distance 수가 전체 정점 수와 같은지 확인
    if len(distance) == V:
        return max(distance.values()) # 최단 거리 추출
    return -1 # 최단 거리가 없으면 -1 반환

다익스트라 알고리즘의 시간 복잡도