π‘λ¬Έμ
n(2 β€ n β€ 100)κ°μ λμκ° μλ€.m(1 β€ m β€ 100,000)κ°μ λ²μ€κ° μλ€.(A, B)μ λν΄μ λμ Aμμ Bλ‘ κ°λλ° νμν λΉμ©μ μ΅μκ°μ ꡬνλ νλ‘κ·Έλ¨μ μμ±νμμ€.nμ΄ μ£Όμ΄μ§κ³ λμ§Έ μ€μλ λ²μ€μ κ°μ mμ΄ μ£Όμ΄μ§λ€.m+2μ€κΉμ§ λ€μκ³Ό κ°μ λ²μ€μ μ λ³΄κ° μ£Όμ΄μ§λ€.a, λμ°© λμ b, ν λ² νλλ° νμν λΉμ© cλ‘ μ΄λ£¨μ΄μ Έ μλ€.100,000λ³΄λ€ μκ±°λ κ°μ μμ°μμ΄λ€.νλκ° μλ μ μλ€.nκ°μ μ€μ μΆλ ₯ν΄μΌ νλ€.iλ²μ§Έ μ€μ μΆλ ₯νλ jλ²μ§Έ μ«μλ λμ iμμ jλ‘ κ°λλ° νμν μ΅μ λΉμ©μ΄λ€.iμμ jλ‘ κ° μ μλ κ²½μ°μλ κ·Έ μ리μ 0μ μΆλ ₯νλ€.βνλ‘μ΄λ μμ μ λν΄

π§βπ» μ½λ νμ΄
import sys
INF = int(1e9)
n = int(sys.stdin.readline())
m = int(sys.stdin.readline())
graph = [[INF] * (n + 1) for _ in range(n + 1)] # κ²½λ‘ νμμ μν κ·Έλν 2μ°¨μ λ°°μ΄λ‘ μ΄κΈ°ν
for i in range(1, n + 1):
for j in range(1, n + 1):
if i == j:
graph[i][j] = 0 # μκΈ° μμ μΌλ‘ κ°λ 거리 μ΄κΈ°ν
for _ in range(m):
x, y, cost = map(int, sys.stdin.readline().split())
graph[x][y] = min(graph[x][y], cost) # graph[x][y] = cost
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]) # λ€μ κ²½λ‘ μ΅λ¨ 거리 κ°±μ
# a -> k -> b / a -> 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()