11404번: 플로이드
첫째 줄에 도시의 개수 n이 주어지고 둘째 줄에는 버스의 개수 m이 주어진다. 그리고 셋째 줄부터 m+2줄까지 다음과 같은 버스의 정보가 주어진다. 먼저 처음에는 그 버스의 출발 도시의 번호가
www.acmicpc.net
플로이드 와샬 알고리즘
1) i 에서 j 까지의 최단 거리를 (i ~ k + k ~ j)와 비교하며 업데이트
2) INF 값 그대로면 0출력, 아닐시 거리 값 출력
전체 코드
import sys
input = sys.stdin.readline
N = int(input())
M = int(input())
INF = sys.maxsize
dosi = [[INF for _ in range(N+1)] for __ in range(N+1)]
for _ in range(M):
a, b, c = map(int, input().split())
dosi[a][b] = min(c, dosi[a][b])
for k in range(1, N + 1):
for i in range(1, N + 1):
for j in range(1, N + 1):
if i == j:
dosi[i][j] = 0
else:
dosi[i][j] = min(dosi[i][j], dosi[i][k] + dosi[k][j])
for i in range(1, N + 1):
for j in range(1, N + 1):
if dosi[i][j] == INF:
print(0, end = ' ')
else:
print(dosi[i][j], end = ' ')
print()
'프로그래밍 > Python' 카테고리의 다른 글
[Python] 백준 20040 사이클 게임 (0) | 2021.02.16 |
---|---|
[Python] 백준 1504 특정한 최단 경로 (0) | 2021.02.16 |
[Python] 백준 2470 두 용액 (0) | 2021.02.15 |
[Python] 백준 11399 ATM (0) | 2021.02.15 |
[Python] 백준 11047 동전0 (0) | 2021.02.15 |