A번째 도시에서 B번째 도시까지 가는데 드는 최소비용 구하기.
입력 | 출력 |
---|---|
5 8 1 2 2 1 3 3 1 4 1 1 5 10 2 4 2 3 4 1 3 5 1 4 5 3 1 5 | 4 |
: 출발점에서 갈 수 있는 다른 노드들의 최소비용을 구하고 도착점의 값을 구한다.
-> 다익스트라 알고리즘 이용.
if dp[n] < w: continue
이 코드를 쓰지 않아도 답은 잘 나온다. 그런데 계속 시간 초과가 나서 정답이었던 코드와 비교해보니 이 부분이 없었다. 이 코드는 dp[n]이 현재 n에 해당하는 가중치 w보다 작다면 이미 이전에 탐색하였다는 뜻이므로 continue를 통해 아래의 코드를 실행하지 않고 넘어갈 수 있다. 이전까지 중요하게 생각하지 않았는데 앞으로는 꼭 넣어주어야겠다!
import heapq
import sys
def dks(bus, dp, s, e):
dp[s] = 0
q = []
heapq.heappush(q, (0, s)) #가중치, 노드
while q:
w, n = heapq.heappop(q)
if dp[n] < w:
continue
for ad_n, ad_w in bus[n]:
new_w = w + ad_w
if new_w < dp[ad_n]:
dp[ad_n] = new_w
heapq.heappush(q, (new_w, ad_n))
return dp[e]
n = int(sys.stdin.readline())
m = int(sys.stdin.readline())
bus = [[] for _ in range(n+1)]
for _ in range(m):
s, e, w = map(int, sys.stdin.readline().split())
bus[s].append((e, w))
s, e = map(int, sys.stdin.readline().split())
dp = [1e9]*(n+1)
print(dks(bus, dp, s, e))