코딩테스트 대비/BOJ

[Baekjoon/Python] 11404번: 플로이드 - 효과는 굉장했다!

bluetag_boy 2022. 6. 12. 04:01
반응형
 

11404번: 플로이드

첫째 줄에 도시의 개수 n이 주어지고 둘째 줄에는 버스의 개수 m이 주어진다. 그리고 셋째 줄부터 m+2줄까지 다음과 같은 버스의 정보가 주어진다. 먼저 처음에는 그 버스의 출발 도시의 번호가

www.acmicpc.net

 

알고리즘 분류

  • 그래프 이론
  • 플로이드–워셜

 

 

SOLUTION

import sys
INF = sys.maxsize

n = int(sys.stdin.readline())
m = int(sys.stdin.readline())
maps = [[INF] * n for _ in range(n)]

for _ in range(m):
    start, end, cost = map(int, sys.stdin.readline().split())
    
    if cost < maps[start-1][end-1]:
        maps[start-1][end-1] = cost

for k in range(n): # 경유지
    for i in range(n): # 시작점
        for j in range(n): # 끝점
            if i == j:
                maps[i][j] = 0
                
            else:
                maps[i][j] = min(maps[i][j], maps[i][k] + maps[k][j])
                
for i in range(n):
    for j in range(n):
        print(0 if maps[i][j] == INF else maps[i][j], end = " ")   
    print()