Develop/알고리즘 (Algorithm)

[백준 / Python] 11404 - 플로이드

안다희 2020. 12. 3. 23:59
728x90

결과

  • 메모리: 126224KB
  • 시간: 348ms

www.acmicpc.net/source/24194515

해결방식

  • 전형적인 플로이드 문제.
  • maxsize를 import 하지 않고 100000정도로 설정하면 너무 작아서 "틀렸습니다"가 뜬다. 주의하기.

제출코드

# 제출  
from sys import maxsize # 큰 값  
max = maxsize  

n = int(input())  
m = int(input())  
route = \[\[max\] \* n for \_ in range(n)\]  

# 1. 도시1에서 도시1의 비용은 0이니까  
for i in range(n):  
    route\[i\]\[i\] = 0  

# 2. 각 도시 간의 비용 연결  
for \_ in range(m):  
    a, b, c = map(int, input().split())  
    # 이미 입력된 적이 있고, origin 보다 c가 더 작으면  
    if route\[a - 1\]\[b - 1\] < max:  
        if c < route\[a - 1\]\[b - 1\]:  
            route\[a - 1\]\[b - 1\] = c  
    else:  
        route\[a - 1\]\[b - 1\] = c  


# 3. printArr 함수  
def printArr(arr):  
    for i in arr:  
        for j in i:  
            print(j, end = " ")  
        print()  

# 4. floyd 함수  
def floyd():  
    for k in range(n):  
        for i in range(n):  
            for j in range(n):  
                if route\[i\]\[k\] + route\[k\]\[j\] < route\[i\]\[j\]:  
                    route\[i\]\[j\] = route\[i\]\[k\] + route\[k\]\[j\]  

floyd()  

# 5. 여전히 max인 곳은 0으로 바꾸기  
for i in range(n):  
    for j in range(n):  
        if route\[i\]\[j\] == max:  
            route\[i\]\[j\] = 0  

printArr(route)