import sys
input = sys.stdin.readline
def BOJ11404() :
n = int(input())
m = int(input())
dist = [[1e9 for _ in range(n)] for _ in range(n)]
for _ in range(m) :
a, b, c = list(map(int, input().split()))
dist[a - 1][b - 1] = min(dist[a-1][b-1], c)
for k in range(n) :
for i in range(n) :
for j in range(n) :
if dist[i][k] != 0 and dist[k][j] != 0 :
dist[i][j] = min(dist[i][j], dist[i][k] + dist[k][j])
for i in range(n) :
for j in range(n) :
if i != j :
if dist[i][j] == 1e9 :
print(0, end=' ')
else :
print(dist[i][j], end=' ')
else :
print(0, end=' ')
print()
BOJ11404()
접근방법 :
1. 제목에도 나와있듯이 플로이드 워셜 알고리즘을 이용하면 된다.
2. 최단 거리를 구하는 알고리즘이 두개가 있다. 플로이드 워셜, 다익스트라 둘다 네트워크에서 라우터의 최단경로를 구하다가 탄생한 알고리즘이다.
모든 점에서 각각의 점으로의 최단 거리를 구하고 싶을때는 플로이드 워셜 알고리즘을 쓰면 된다.
한 점에서 특정한 점으로의 최단 거리를 알고 싶다면 다익스트라 알고리즘을 사용하자.
3. pivot을 하나 잡고 [시작점][pivot] + [pivot][종료점]을 통해 최단거리를 계속 갱신해주자!!
https://www.acmicpc.net/problem/11404
11404번: 플로이드
첫째 줄에 도시의 개수 n이 주어지고 둘째 줄에는 버스의 개수 m이 주어진다. 그리고 셋째 줄부터 m+2줄까지 다음과 같은 버스의 정보가 주어진다. 먼저 처음에는 그 버스의 출발 도시의 번호가
www.acmicpc.net
'알고리즘' 카테고리의 다른 글
쿼드트리 [백준 1992] - python (0) | 2022.02.24 |
---|---|
카잉 달력 [백준 6064] - python (0) | 2022.02.23 |
촌수계산[백준 2644] - python (0) | 2022.02.21 |
파일 합치기[백준 11066] - python (0) | 2022.02.20 |
스티커[백준 9465] - python (0) | 2022.02.19 |