본문 바로가기
코딩 테스트/코딩테스트 - 학습

다익스트라

by DeveloperM 2023. 1. 20.

다익스트라 알고리즘은 source node로 부터 모든 node까지의 최단거리를 구하는 알고리즘이다.

다익스트라 알고리즘을 알기 위해서는

먼저 heapq부터 알고 해야 한다.

그전에 heapq의 특징을 알고가면 좋다.

[heapq]

  • 완전 이진 트리 형태
  • 부모 노드 키값이 자식 노드 키값보다 항상 작다(최소힙)
  • 키값의 대소관계는 부모/자식 관계에서만 성립하고, 자식끼리의 대소관계는 없다

다익스트라 알고리즘

1. node가 숫자일때

 

1916번: 최소비용 구하기

첫째 줄에 도시의 개수 N(1 ≤ N ≤ 1,000)이 주어지고 둘째 줄에는 버스의 개수 M(1 ≤ M ≤ 100,000)이 주어진다. 그리고 셋째 줄부터 M+2줄까지 다음과 같은 버스의 정보가 주어진다. 먼저 처음에는 그

www.acmicpc.net

import heapq
import sys

input = sys.stdin.readline
N = int(input())
M = int(input())
graph = [[] for _ in range(N+1)]
visit = [1e9]*(N+1)

for i in range(M):
    a,b,c = map(int,input().split())
    graph[a].append((c,b))

start,end = map(int, input().split())

def sol(start):
    global graph,visit
    pq = []
    heapq.heappush(pq, (0,start))
    visit[start] = 0

    while pq:
        c_dist,cur = heapq.heappop(pq)

        if visit[cur] < c_dist : continue

        for n_dist,next in graph[cur]:
            weight = n_dist + c_dist
            if visit[next] > weight:
                visit[next] = weight
                heapq.heappush(pq, (weight,next))

sol(start)
print(visit[end])

'코딩 테스트 > 코딩테스트 - 학습' 카테고리의 다른 글

(그리디) 크루스칼 알고리즘  (1) 2023.01.28
문자열  (0) 2023.01.25
정렬  (0) 2023.01.20
완전 탐색  (0) 2023.01.18
dfs bfs  (0) 2023.01.14