문제
풀이
그래프의 모든 지점에 대해 최소비용을 구하는 문제이므로 플로이드를 사용하였다.
플로이드의 구현 코드는 아래와 같다.
for k in range(1, n + 1):
for i in range(1, n + 1):
for j in range(1, n + 1):
graph[i][j] = min(graph[i][j], graph[i][k] + graph[k][j])
그래프의 두 지점에 대해 두 지점을 거쳐가는 모든 경우의 최소값을 구해준다.
코드
import sys
INF = sys.maxsize
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 + a):
if a == b:
graph[a][b] = 0
for _ in range(m):
a, b, c = map(int, input().split())
graph[a][b] = min(c, graph[a][b])
for k in range(1, n + 1):
for i in range(1, n + 1):
for j in range(1, n + 1):
graph[i][j] = min(graph[i][j], graph[i][k] + graph[k][j])
for i in range(1, n + 1):
for j in range(1, n + 1):
if graph[i][j] == INF:
print(0, end=" ")
else:
print(graph[i][j], end=" ")
print()
'알고리즘' 카테고리의 다른 글
[백준 파이썬] 15686 치킨 배달 (0) | 2023.12.18 |
---|---|
[백준 파이썬] 11581 구호물자 (0) | 2023.12.15 |
[백준 파이썬] 9251 LCS (0) | 2023.12.11 |
[백준 파이썬] 1865 웜홀 (2) | 2023.12.08 |
[백준 파이썬] 2644 촌수계산 (1) | 2023.12.06 |