[snippet] floyd-warshall.py

Yongjun Park·2022년 7월 13일
0

백준 11404번. 플로이드에 대한 풀이를 Floyd-Warshall Algorithm의 스니펫 느낌으로 작성.

  • 모든 정점에서 모든 정점까지의 Shortest Path(최단 경로) 를 구할 때 사용.
    (단, 가중치는 모두 양수여야 함.)
import sys
input = lambda: sys.stdin.readline().rstrip()
INF = int(1e9)

V = int(input())
E = int(input())
graph = [[INF]*(V+1) for _ in range(V+1)] # 1-indexed, 2D

for i in range(1, V+1):
    graph[i][i] = 0

for _ in range(E):
    a, b, cost = map(int, input().split())
    graph[a][b] = min(graph[a][b], cost)

#######################

for k in range(1, V+1):
    for i in range(1, V+1):
        for j in range(1, V+1):
            graph[i][j] = min(graph[i][j], graph[i][k]+graph[k][j])

#######################

for i in range(1, V+1):
    for j in range(1, V+1):
        if graph[i][j] == INF:
            graph[i][j] = 0
            
for i in range(1, V+1):
    print(*graph[i][1:])
profile
추상화되었던 기술을 밑단까지 이해했을 때의 쾌감을 잊지 못합니다

0개의 댓글