문제
풀이
- a번째 도시에서 b번째 도시까지 가는데 드는 최소비용을 출력하는 문제로
최단 경로
유형이다.
- 입력변수의 범위가 크므로
다익스트라 알고리즘
으로 접근했다.
코드
import heapq
import sys
input = sys.stdin.readline
inf = int(1e9)
def dijkstra(start: int, end: int) -> int:
distance = [inf] * (n + 1)
queue = []
heapq.heappush(queue, (0, start))
distance[start] = 0
while queue:
dist, now = heapq.heappop(queue)
if distance[now] < dist:
continue
for i in graph[now]:
cost = dist + i[1]
if cost < distance[i[0]]:
distance[i[0]] = cost
heapq.heappush(queue, (cost, i[0]))
return distance[end]
if __name__ == '__main__':
n = int(input())
m = int(input())
graph = [[] for _ in range(n+1)]
for _ in range(m):
x, y, z = map(int, input().split())
graph[x].append([y, z])
start, end = map(int, input().split())
print(dijkstra(start, end))
결과
출처 & 깃허브
BOJ 1916
GITHUB