STUDY/Algorithm
[백준] 11657 타임머신 python
sinawi95
2022. 3. 11. 08:29
728x90
https://www.acmicpc.net/problem/11657
11657번: 타임머신
첫째 줄에 도시의 개수 N (1 ≤ N ≤ 500), 버스 노선의 개수 M (1 ≤ M ≤ 6,000)이 주어진다. 둘째 줄부터 M개의 줄에는 버스 노선의 정보 A, B, C (1 ≤ A, B ≤ N, -10,000 ≤ C ≤ 10,000)가 주어진다.
www.acmicpc.net
벨만 포드 알고리즘을 사용하는 문제이다. 알고리즘에 대한 자세한 내용은 아래 링크로 달아놓겠다.
# import sys; input = sys.stdin.readline
INF = 20_000_000_000
def bf(start):
global dist, N, M, edges
dist[start] = 0
for i in range(N):
for j in range(M):
cur, next, cost = edges[j]
if dist[cur] != INF and dist[next] > dist[cur] + cost:
dist[next] = dist[cur] + cost
if i == N - 1:
return True
return False
def main():
global dist, N, M, edges
N, M = map(int, input().split())
edges = []
for _ in range(M):
a, b, c = map(int, input().split())
edges.append((a, b, c))
dist = [INF for _ in range(N + 1)]
cycle = bf(1)
if cycle:
print("-1")
else:
for i in range(2, N+1):
if dist[i] == INF:
print("-1")
else:
print(dist[i])
if __name__ == "__main__":
main()
https://www.youtube.com/watch?v=Ppimbaxm8d8