해당 문제를 풀기 위해 다익스트라 개념에 대해 먼저 알고 있어야한다.
2024.03.28 - [CS/Algorithm] - [알고리즘 개념 정리] 다익스트라 최단 경로 알고리즘 (Python)
문제 링크
문제 요약
N개의 도시가 있고, 한 도시에서 출발해 다른 도시에 도착에 도착하는 M개의 버스가 있다.
A번째 도시에서 B번째 도시까지 가는데 드는 최소 비용을 출력하기
(도시의 개수 1 <= N <= 1000, 버스의 개수는 1 <= M <= 100,000)
접근 방법 정리
- 한 도시에서 출발해 다른 도시에 도착 -> 단방향 그래프
- 입력 순서대로 받고 (첫 줄 도시의 개수, 두번째 줄 버스의 출발 도시, 세번째 줄 ~ M+2줄 까지 버스의 정보, 마지막줄 출발 도시번호, 도착 도시번호)
- dijkstra를 이용해 최단거리를 구한다.
- INF로 도시의 개수만큼 거리를 초기화
- 버스의 정보를 graph로 만들어 저장
- 다익스트라에 힙을 사용해 구현한다.
코드
import heapq
n = int(input())
m = int(input())
INF = 1e9
arr = [[] for _ in range(n + 1)]
distance = [INF] * (n + 1)
for i in range(m):
a, b, c = map(int, input().split())
arr[a].append((b, c))
s, g = map(int, input().split())
def dijkstra(s):
heap = []
heapq.heappush(heap, (s, 0))
while heap:
start, cost = heapq.heappop(heap)
if distance[start] < cost:
continue
for z in arr[start]:
a, b = z
c = cost + b
if distance[a] > c:
distance[a] = c
heapq.heappush(heap, (a, c))
dijkstra(s)
print(distance[g])
728x90
'CS > Algorithm' 카테고리의 다른 글
[백준 11779번] 최소비용 구하기 2 (Python) (0) | 2024.03.30 |
---|---|
[알고리즘 개념 정리] 다익스트라 최단 경로 알고리즘 (Python) (0) | 2024.03.28 |
[알고리즘 개념 정리] 다이나믹 프로그래밍 (Python) (0) | 2024.03.27 |
[백준 11404번] 플로이드 (Python) (0) | 2024.03.26 |
[백준 1389번] 케빈 베이컨의 6단계 법칙 (Python) (0) | 2024.03.26 |
댓글