국문과 유목민

[최단경로] 플로이드 본문

알고리즘_코딩테스트/이것이 코딩테스트다

[최단경로] 플로이드

논곰 2021. 12. 22. 22:17
"이것이 코딩테스트다(나동빈 저)"에서 나온 문제에 대한 코드를 다루고 있습니다.
문제에 대한 구체적인 설명과 조건 등은 책을 참고해주시기 바랍니다.

소요시간: 20분

1. 문제 설명

- 플로이드 워셜 알고리즘 구현 문제

2. 접근 방식

- 플로이드 워셜 알고리즘을 사용

- 단, 입력을 받을 때도, 동일한 위치에 cost값이 변형 될 수 있기에 조건을 넣어줘야 한다. (처음에 이 부분을 안 넣어서 오류가 났었음)

3. 코드

import sys

n = int(input())
m = int(input())
INF = 1e9
graph = [[INF]*(n+1) for _ in range(n+1)]

for i in range(1, n+1):
    for j in range(1, n+1):
        if i == j:
            graph[i][j] = 0
input = sys.stdin.readline
for _ in range(m):
    a, b, c = map(int, input().split())
    graph[a][b] = min(graph[a][b], c)
    
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 a in range(1, n+1):
    for b in range(1, n+1):
        if graph[a][b] == INF:
            print(0, end=" ")
        else:
            print(graph[a][b], end=" ")
    print()

4. 코멘트

- 백준에서는 최단경로 문제처럼 그래프 형태를 입력으로 받는다면, import sys.stdin.readline() 기억하자, [readline's'아님)

'알고리즘_코딩테스트 > 이것이 코딩테스트다' 카테고리의 다른 글

[최단경로] 화성탐사  (0) 2021.12.23
[최단경로] 정확한 순위  (0) 2021.12.22
[DP] 편집거리  (0) 2021.12.21
[DP] 못생긴 수  (0) 2021.12.21
[DP] 퇴 사  (0) 2021.12.21