플로이드 워셜 알고리즘
정의 & 특징
- floyd-warshall-algorithm
모든 지점에서 다른 모든 지점까지의 최단 경로를 모두 구해야 하는 경우 사용할 수 있는 알고리즘
- 시간 복잡도 O(N^3)
- 2차원 리스트에 최단 거리 정보를 저장해야 한다.
다이나믹 프로그래밍
에 속한다.
- D(ab) = min(D(ab), D(ak)+ D(kb))
플로이드 워셜 알고리즘 소스코드
inf = int(1e9)
n = int(input())
m = int(input())
graph = [[inf] * (n+1) for _ in range(n+1)]
for a in range(1, n+1):
for b in range(1, n+1):
if a == b:
graph[a][b] = 0
for _ in range(m):
a, b, c = map(int, input().split())
graph[a][b] = c
for k in range(1, n+1):
for a in range(1, n+1):
for b in range(1, n+1):
graph[a][b] = min(graph[a][b], graph[a][k] + graph[k][b])
for a in range(1, n+1):
for b in range(1, n+1):
if graph[a][b] == inf:
print('infinity')
else:
print(graph[a][b])
출처 & 깃허브
이것이 취업을 위한 코딩 테스트다 with python
github