문제 출처 : www.acmicpc.net/problem/1753
문제 해석 : 방향 그래프가 주어질 때 시작점에서 각 정점으로 가는 최단 경로를 구하여 출력하는 문제이다.
문제 풀이 : 모든 점에 대한 거리를 구할 때
1. 다익스트라
2. 플루이드 워셜
알고리즘을 활용할 수 있다. 이 문제에서는 정점의 개수가 20,000까지 주어지기 때문에 우선순위 큐를 활용한 다익스트라 알고리즘을 활용해서 풀어야 시간 초과를 피할 수 있다.
풀이 코드
import sys, heapq
INF = sys.maxsize
input = sys.stdin.readline
def dijstra(start):
distance = [INF] * (V+1)
Q = []
heapq.heappush(Q, [0, start])
distance[start] = 0
while Q:
now_cost, now_vertex = heapq.heappop(Q)
for next_cost, next_vertex in graph[now_vertex]:
next_cost = next_cost + now_cost
if next_cost < distance[next_vertex]:
distance[next_vertex] = next_cost
heapq.heappush(Q, [next_cost, next_vertex])
return distance
V, E = map(int, input().split())
K = int(input()) # 시작 정점
graph = [[] for _ in range(V+1)]
for _ in range(E):
start, end, cost = map(int, input().split())
graph[start].append([cost, end])
answer_arr = dijstra(K)
for i in range(1, len(answer_arr)):
if i == K:
print(0)
elif answer_arr[i] == INF:
print("INF")
else:
print(answer_arr[i])
author : donghak park
contact : donghark03@naver.com
## 문제의 저작권은 백준 알고리즘 사이트에 있습니다. 혹시 문제가 되는 부분이 있으면 연락 바랍니다.
'📊알고리즘, 문제풀이 > 📈문제풀이 (PS)' 카테고리의 다른 글
[알고리즘][Python] 백준 1786 찾기 문제 풀이 (0) | 2021.01.19 |
---|---|
[알고리즘][Python] 백준 1865 웜홀 문제 풀이 (0) | 2021.01.19 |
[알고리즘][Python] 백준 1629 곱셈 문제 풀이 (0) | 2021.01.18 |
[알고리즘][Python] 백준 1504 특정한 최단 경로 문제 풀이 (0) | 2021.01.18 |
[알고리즘][Python] 백준 1238 파티 문제 풀이 (0) | 2021.01.18 |