728x90
처음에 타임머신 & 웜홀 문제 컨셉을 이해하는데 응? 시간이 거꾸로 가 ? 무슨말이지;; 이랬는데 이말인 즉슨,
가중치가 음수일 수 있다라는 의미이다
즉, 우리는 최단거리를 구해야 하는데, 다익스트라 방법에서는 음수인 value가 주어지지 않았었다.
음수인 가중치가 주어지면 ?? 바로바로 우리가 알고리즘 시간에 배웠지만 망각했을 가능성이 큰 Bellman-Ford 방법을 떠올려야 한다 !!
다익스트라와 방법은 유사하나, 다른점은
노드를 하나씩 돌면서, 최단거리를 갱신해주는 작업을 v-1 번만 수행해야 한다는 점이다
v-1 번 이상일때도 값이 바뀐다는 뜻은 바로 cycle을 돌고 있다는 뜻이다 ..
# 11657 타임 머신
n, m = map(int, input().split())
INF = int(1e9)
dist = [INF] * (n+1)
edges = []
for i in range(m):
a, b, cost = map(int, input().split())
edges.append((a, b, cost))
dist[1] = 0
def solve():
for i in range(n):
for j in range(m): # edges 확인하기 !!!!
start, end, cost = edges[j][0], edges[j][1], edges[j][2]
if dist[start] != INF and dist[end] > dist[start] + cost:
dist[end] = dist[start] + cost
if i == n-1:
return False
return True
if solve() == False:
print(-1)
else:
for i in range(2, n+1):
if dist[i] == INF:
print(-1)
else:
print(dist[i])
728x90
'Algorithm (PS)' 카테고리의 다른 글
[백준] 11660 구간 합구하기 -> 다이나믹 프로그래밍으로 효율적인 연산! (0) | 2022.02.13 |
---|---|
[백준] 9466 텀프로젝트 : 다익스트라로 왕복하기 (0) | 2022.02.10 |
[백준] 13458번 시험감독 in Python (0) | 2022.02.08 |
[백준] 10870 피보나치 수열 5 (0) | 2022.02.07 |
정렬 알고리즘 (0) | 2022.02.07 |