import sys
n = int(sys.stdin.readline())
m = int(sys.stdin.readline())
bus = [[ int(1e9) for _ in range(n+1) ] for _ in range(n+1)]
for i in range(1,n+1):
bus[i][i] = 0
for i in range(m) :
s,e,c = map(int,sys.stdin.readline().split())
bus[s][e] = min(bus[s][e], c)
# n개의 줄을 출력해야 한다.
# i번째 줄에 출력하는 j번째 숫자는
# 도시 i에서 j로 가는데 필요한 최소 비용이다.
# 만약, i에서 j로 갈 수 없는 경우에는 그 자리에 0을 출력
for k in range(1,n+1) :
for i in range(1,n+1) :
for j in range(1,n+1) :
bus[i][j] = min(bus[i][j], bus[i][k]+bus[k][j])
for i in range(1,n+1) :
for j in range(1,n+1) :
if bus[i][j]<1e9 :
print(bus[i][j], end=" " )
else :
print(0, end = " ")
print()
(1) 틀린 이유 하나
(2) 틀린 이유 둘
시작 도시와 도착 도시를 연결하는 노선은 하나가 아닐 수 있다.
라는 조건 때문!!
import sys
n = int(sys.stdin.readline())
m = int(sys.stdin.readline())
bus = [[ 1000001 for _ in range(n+1) ] for _ in range(n+1)]
for i in range(1,n+1):
bus[i][i] = 0
for i in range(m) :
s,e,c = map(int,sys.stdin.readline().split())
bus[s][e] = c
# n개의 줄을 출력해야 한다.
# i번째 줄에 출력하는 j번째 숫자는
# 도시 i에서 j로 가는데 필요한 최소 비용이다.
# 만약, i에서 j로 갈 수 없는 경우에는 그 자리에 0을 출력
for k in range(1,n+1) :
for i in range(1,n+1) :
for j in range(1,n+1) :
bus[i][j] = min(bus[i][j], bus[i][k]+bus[k][j])
for i in range(1,n+1) :
for j in range(1,n+1) :
if bus[i][j]<=100000 :
print(bus[i][j], end=" " )
else :
print(0, end = " ")
print()
for k in range(1,n+1) :
for i in range(1,n+1) :
for j in range(1,n+1) :
dp[i][j] = min( dp[i][j] , dp[i][k] + dp[k][j] )
파이썬에서 무한 표시 : int(1e9)
개념 REFERENCE : https://freedeveloper.tistory.com/385