최단경로 문제와 같이 간선의 길이까지 생각해야하는 문제는 보통 DFS로 풉니다.
DFS 중에서도 최단경로 문제는 Dijkstra 알고리즘을 사용하는 경우가 많습니다.
우리가 v라는 노드로 가고싶다면
첫번째 방법
두번째 방법
import sys
import heapq
V, E = map(int, sys.stdin.readline().split())
K = int(input())
graph = [[] for _ in range(V+1)]
dist = [float('inf')] * (V+1)
dist[K] = 0
for _ in range(E):
u, v, w = map(int, sys.stdin.readline().split())
graph[u].append((v, w))
pq = []
heapq.heappush(pq, (0, K))
while(pq):
curDist, curNode = heapq.heappop(pq)
if dist[curNode] < curDist:
continue
for destNode, destDist in graph[curNode]:
d = curDist + destDist
if dist[destNode] > d:
dist[destNode] = d
heapq.heappush(pq, (d, destNode))
for i in range(V+1):
if i == 0:
continue
if dist[i] == float('inf'):
print("INF")
else:
print(dist[i])