문제 링크
https://www.acmicpc.net/problem/11404
11404번: 플로이드
첫째 줄에 도시의 개수 n이 주어지고 둘째 줄에는 버스의 개수 m이 주어진다. 그리고 셋째 줄부터 m+2줄까지 다음과 같은 버스의 정보가 주어진다. 먼저 처음에는 그 버스의 출발 도시의 번호가
www.acmicpc.net
풀이
- 플로이드 워셜 알고리즘 사용
: 모든 지점에서 다른 모든 지점까지의 최단 거리를 구할 때 사용하는 알고리즘
n = int(input())
m = int(input())
INF = int(1e9)
graph = [ [INF] * (n+1) for _ in range(n+1) ]
for _ in range(m):
a, b, c = map(int,input().split())
# 시작 도시와 도착 도시를 연결하는 노선이 하나가 아닐 수 있으므로
if graph[a][b] < INF:
graph[a][b] = min(graph[a][b], c)
else:
graph[a][b] = c
# 자기자신에서 자기 자신으로 가는 비용 0으로 초기화
for i in range(1,n+1):
for j in range(1,n+1):
if i == j:
graph[i][j] = 0
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()
'개발 > algorithm' 카테고리의 다른 글
[백준 1043번] 거짓말 - python (0) | 2022.03.11 |
---|---|
[백준 1967번] 트리의 지름 - python (0) | 2022.03.11 |
[백준 1504번] 특정한 최단 경로 - python (0) | 2022.03.11 |
[백준 15868번] 치킨 배달 - python (0) | 2022.03.11 |
[백준 9465번] 스티커 - python (0) | 2022.03.10 |