INF = int(1e9) #무한을 의미하는 값으로 10억을 설정
#노드의 개수 및 간선의 개수를 입력받기
n = int(input())
m = int(input())
#2차원 리스트(그래프 표현)를 만들고, 모든 값으로 무한으로 초기화
graph = [[INF] * (n + 1) for _ inrange(n + 1)]
#자기 자신에서 자기 자신으로 가는 비용은 0으로 초기화for a inrange(1, n + 1):
for b inrange(1, n + 1):
if a == b:
graph[a][b] = 0
#각 간선에 대한 정보를 입력받아, 그 값으로 초기화for _ inrange(m):
#A에서 B로 가는 비용은 C라고 설정
a, b, c = map(int, input().split())
graph[a][b] = c
#점화식에 따라 플로이드 워셜 알고리즘을 수행for k inrange(1, n + 1):
for a inrange(1, n + 1):
for b inrange(1, n + 1):
graph[a][b] = min(graph[a][b], graph[a][k] + graph[k][b])
#수행된 결과를 출력for a inrange(1, n + 1):
for b inrange(1, n + 1):
#도달할 수 없는 경우, 무한(INFINITY)이라고 출력if graph[a][b] == INF:
print("INFINITY", end=" ")
#도달할 수 잇는 경우 거리를 출력else:
print(graph[a][b], end=" ")
print()
백준 11403 경로 찾기
import sys
N = int(sys.stdin.readline())
graph = [list(map(int, sys.stdin.readline().split())) for _ in range(N)]
for k in range(N):
for i in range(N):
for j in range(N):
if graph[i][k] and graph[k][j]:
graph[i][j] = 1
for i in range(N):
for j in range(N):
print(graph[i][j], end=" ")
print()
백준 11404 플로이드
import sys
INF = int(1e9)
n = int(sys.stdin.readline()) # 도시의 수
m = int(sys.stdin.readline()) # 버스의 수
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
for _ in range(m):
a, b, c = map(int, sys.stdin.readline().split())
graph[a][b] = min(c, graph[a][b])
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()