플로이드-와샬 알고리즘
💡모든 노드에서 다른 모든 노드까지의 최단 경로를 모두 계산
원리
각 단계마다 특정한 노드 K를 거쳐 가는 경우를 확인
-> a에서 b로 가는 최단 거리보다 a에서 K를 거쳐 b로 가는 거리가 더짧은지 검사
D(a, b) = min(D(a,b), D(a,k) + D(k, b))
알고리즘
for k in range(1, N + 1):
for i in range(1, N + 1):
for j in range(1, N + 1):
cost[i][j] = min(cost[i][j], cost[i][k] + cost[k][j])
코드
# 11404 플로이드 - 골드4 김수민
N = int(input())
M = int(input())
cost = [[1e9] * (N + 1) for _ in range(N + 1)]
for _ in range(M):
start, end, dis = map(int, input().split())
cost[start][end] = min(dis, cost[start][end])
# 플로이드-와샬 알고리즘
for k in range(1, N + 1):
cost[k][k] = 0
for i in range(1, N + 1):
for j in range(1, N + 1):
cost[i][j] = min(cost[i][j], cost[i][k] + cost[k][j])
# 출력
for i in range(1, N + 1):
for j in range(1, N + 1):
if cost[i][j] == 1e9:
cost[i][j] = 0
print(cost[i][j], end=' ')
print()