11404번: 플로이드
첫째 줄에 도시의 개수 n이 주어지고 둘째 줄에는 버스의 개수 m이 주어진다. 그리고 셋째 줄부터 m+2줄까지 다음과 같은 버스의 정보가 주어진다. 먼저 처음에는 그 버스의 출발 도시의 번호가
www.acmicpc.net
전 포스팅에서 만들어 놓은 함수로 날먹을 쓱싹 해보려고 했더니 여기엔 새로운 개념이 하나 끼어있다. 한 도시에서 다른 도시로 이동하는 버스 개수가 하나가 아닐 수 있다는 것. 그래서 입력을 받는 동시에 cost의 min값을 갱신해줘야된다.
안보고 다시 구현해볼겸 그냥 풀어보자. 어차피 구현 난이도도 낮으니..
n = int(input())
m = int(input())
INF = 1e10
graph = [[INF] * (n + 1) for _ in range(n + 1)]
for _ in range(m):
src, dst, cost = map(int, input().split())
graph[src][dst] = min(graph[src][dst], cost)
for i in range(1, n + 1):
graph[i][i] = 0
for k in range(1, n + 1):
for a in range(1, n + 1):
for b in range(1, n + 1):
graph[a][b] = min(graph[a][b], graph[a][k] + graph[k][b])
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("")
'코딩 테스트 및 알고리즘 > 이것이 취업을 위한 코딩테스트다' 카테고리의 다른 글
Q39. 화성 탐사 (0) | 2022.04.30 |
---|---|
Q38. 정확한 순위 (0) | 2022.04.30 |
예제문제 : 미래 도시 (0) | 2022.04.29 |
플로이드 워셜 (0) | 2022.04.29 |
다익스트라 구현 카피코딩, 혼자해보기 (0) | 2022.04.28 |