본문 바로가기
Problem Solving/BOJ

[BOJ][Python]11404 풀이

by NoiB 2023. 8. 11.
반응형

https://www.acmicpc.net/problem/11404

 

11404번: 플로이드

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

www.acmicpc.net

import sys
ssr = sys.stdin.readline

INF = 10000001

n = int(ssr())
m = int(ssr())
min_cost = [[INF for _ in range(n)] for _ in range(n)]
for _ in range(m):
    a, b, c = map(int, ssr().split())
    min_cost[a-1][b-1] = min(min_cost[a-1][b-1], c)
for i in range(n):
    min_cost[i][i] = 0
for middle_node in range(n):
    for start_node in range(n):
        for end_node in range(n):
            min_cost[start_node][end_node] = min(min_cost[start_node][end_node], min_cost[start_node][middle_node]+min_cost[middle_node][end_node])
for i in min_cost:
    print(*[j if j != INF else 0 for j in i])

이번에는 플로이드-워셜 최단거리 문제입니다. 데이크스트라나 벨만-포드에 비해서 상대적으로 구현이 간단하고 개념도 간단한 편입니다. 데이크스트라나 벨만-포드에 비해서 구조적 한계로 인해 시간복잡도가 높긴합니다만 한 번 쭉 구해놓고 나면 아무 노드나 2개 뽑아서 그 사이의 최단거리를 구할 수 있다는 점과, 음의 간선이 있어도 사용 가능하다는 점이 장점입니다.

 

문제에서 주의할 점은 갈 수 없는 경로의 경우 0으로 출력해야한다는 점 말고는 딱히 모르겠네요. 기초적인 플로이드-워셜 문제이니 개념을 찾아보고 이 문제로 구현 연습을 해도 좋을 것 같습니다.

반응형

'Problem Solving > BOJ' 카테고리의 다른 글

[BOJ][Python]1987 풀이  (0) 2023.08.21
[BOJ][Python]11444 풀이  (0) 2023.08.19
[BOJ][Python]2206 풀이  (0) 2023.08.09
[BOJ][Python]1918 풀이  (0) 2023.08.08