https://www.acmicpc.net/problem/11657
풀이
음수의 간선이 포함되었기에 벨만 포드 알고리즘으로 문제를 풀어준다. 벨만포드의 알고리즘은 다익스트라 알고리즘의 최적의 해를 포함한다. 다만 시간복잡도가 다익스트라에 비해 높다.자세한 내용은 https://sunghyun98.tistory.com/51 이 글에서 확인 할 수 있다.
# 11657번 타임머신
# 벨만 포드 알고리즘
import sys
input = sys.stdin.readline
INF = int(1e9)
def bf(start):
dist[start] = 0
for i in range(n):
for j in range(m):
cur = edges[j][0]
next_node = edges[j][1]
cost = edges[j][2]
if dist[cur] != INF and dist[next_node] > dist[cur] + cost:
dist[next_node] = dist[cur] + cost
# 코드가 진행되는 과정에서 특정한 노드에서 헛바퀴가 돈다면 다음 노드는 진행되지않는다.
if i == n-1:
return True
return False
n, m = map(int, input().split())
edges = []
dist = [INF] * (n+1)
for _ in range(m):
a, b, c = map(int, input().split())
edges.append((a, b, c))
negative_cycle = bf(1)
if negative_cycle:
print(-1)
else:
for i in range(2, n+1):
if dist[i] == INF:
print(-1)
else:
print(dist[i])
출력결과
'백준 > 최단거리' 카테고리의 다른 글
[백준] 1865번 웜홀 - 파이썬 (0) | 2022.02.17 |
---|---|
[백준] 1238번 파티 - 파이썬 (0) | 2022.02.12 |
[백준] 1504번 특정한 최단 경로 - 파이썬 (0) | 2022.02.12 |
[백준] 14284번 간선 이어가기 2 -파이썬 (0) | 2022.02.12 |
[백준] 1916번 최소비용 구하기 - 파이썬 (0) | 2022.02.12 |