[백준 파이썬] 11404 플로이드

 

 

11404번: 플로이드

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

www.acmicpc.net

문제

 


풀이

그래프의 모든 지점에 대해 최소비용을 구하는 문제이므로 플로이드를 사용하였다.

플로이드의 구현 코드는 아래와 같다.

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