문제.
풀이.
다익스트라를 이용해서 풀면된다.
다익스트라로 최소거리를 구하면서 이동경로를 기록해주고
최소거리와 이동경로를 출력해주면 된다.
소스코드.
import sys
import heapq
def dijkstra(start):
dp[start][0] = 0
dp[start][1] = [start]
heap = []
heapq.heappush(heap, [0, start])
while heap:
now_weigth, now = heapq.heappop(heap)
if dp[now][0] < now_weigth:
continue
for next, weight in graph[now]:
next_weight = weight + now_weigth
if next_weight < dp[next][0]:
dp[next][0] = next_weight
dp[next][1] = dp[now][1] + [next]
heapq.heappush(heap, [next_weight, next])
input = sys.stdin.readline
inf = float('inf')
n = int(input())
m = int(input())
graph = [[] for i in range(n+1)]
dp = [[inf, []] for i in range(n+1)]
for i in range(m):
u, v, w = map(int, input().split())
graph[u].append([v, w])
start, end = map(int, input().split())
dijkstra(start)
print(dp[end][0])
print(len(dp[end][1]))
print(*dp[end][1])
'프로그래밍 > 백준' 카테고리의 다른 글
백준 1167 트리의 지름 - 파이썬 (0) | 2021.08.02 |
---|---|
백준 11780 플로이드 2 - 파이썬 (0) | 2021.08.02 |
백준 13913 숨바꼭질 4 - 파이썬 (0) | 2021.08.02 |
백준 9252 LCS 2 - 파이썬 (0) | 2021.08.02 |
백준 14003 가장 긴 증가하는 부분 수열 5 - 파이썬 (0) | 2021.08.02 |