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

다익스트라

by 안스 인민군 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