728x90
https://www.acmicpc.net/problem/1916
1916번: 최소비용 구하기
첫째 줄에 도시의 개수 N(1 ≤ N ≤ 1,000)이 주어지고 둘째 줄에는 버스의 개수 M(1 ≤ M ≤ 100,000)이 주어진다. 그리고 셋째 줄부터 M+2줄까지 다음과 같은 버스의 정보가 주어진다. 먼저 처음에는 그
www.acmicpc.net
2023.04.11 - [코딩 테스트/개념] - Dijkstra algorithm
# 1 <= N <= 1000
# 1 <= M <= 100000
# positive weight, start node
import sys
from queue import PriorityQueue
readline = sys.stdin.readline
N = int(readline())
M = int(readline())
graph = [[] for _ in range(N + 1)]
for _ in range(M):
v1, v2, w = map(int, readline().split())
graph[v1].append((v2, w))
start, end = map(int, readline().split())
infinity = sys.maxsize
distances = [infinity for _ in range(N + 1)]
distances[start] = 0
visited = [False for _ in range(N + 1)]
queue = PriorityQueue()
queue.put((0, start))
while queue.qsize() > 0:
d, v = queue.get()
if visited[v]:
continue
visited[v] = True
for (adj_v, w) in graph[v]:
distances[adj_v] = min(distances[adj_v], d + w)
queue.put((distances[adj_v], adj_v))
print(distances[end])
시작 노드부터 특정 노드까지의 최소 거리를 구하는 문제고, 양수의 가중치이므로 다익스트라 알고리즘을 활용하면 된다.
728x90
'코딩 테스트 > 백준' 카테고리의 다른 글
[백준 15649번] N과 M (1) (0) | 2023.04.27 |
---|---|
[백준 9663번] N-Queen (2) | 2023.04.15 |
[백준 2252번] 줄 세우기 (0) | 2023.04.15 |
[백준 1976번] 여행 가자 (0) | 2023.04.15 |
[백준 1717번] 집합의 표현 (0) | 2023.04.14 |