문제
풀이
- 도로의 정보가 주어졌을 때, 도로의 길이의 합이 가장 작은 사이클을 찾는 문제로서
최단 경로
문제이다.
- 입력 변수의 범위가 작으므로
플로이드 위셜
알고리즘으로 접근할 수 있다.
코드
import sys
input = sys.stdin.readline
inf = int(1e9)
def floyd():
for k in range(1, v+1):
for a in range(1, v+1):
for b in range(1, v+1):
graph[a][b] = min(graph[a][b], graph[a][k] + graph[k][b])
def solve() -> int:
result = inf
for i in range(1, v+1):
result = min(result, graph[i][i])
return result if result != inf else -1
if __name__ == '__main__':
v, e = map(int, input().split())
graph = [[inf] * (v+1) for _ in range(v+1)]
for _ in range(e):
a, b, c = map(int, input().split())
graph[a][b] = c
floyd()
print(solve())
결과
출처 & 깃허브
BOJ 1956
GITHUB