거쳐가는 정점을 기준으로 알고리즘을 수행하는 특징이 있다.2차원 배열을 만들어서 각 정점에서, 각 정점까지의 비용을 담는다.
(해당 테이블은 현재까지 계산된 최소 비용을 의미한다. 해당 2차원 배열을 반복적으로 갱신해서 최종적으로는 모든 정점에서 모든 정점으로의 최단 경로를 구하는 것이다. 반복의 기준은 거쳐가는 정점이다.)
노드 1번을 거쳐가는 경우에 대한 최소 경로값을 갱신한다.
X→Y 가는 최소 비용 vs X→1 가는 비용 + 1→X 가는 비용2번을 마지막 노드까지 반복한다.

python
def floyd(graph):
# 노드 개수
N = len(graph)
# k: 거쳐가는 노드
for k in range(N):
# i: 출발 노드
for i in range(N):
# j: 도착 노드
for j in range(N):
if graph[i][k] + graph[k][j] < graph[i][j]:
graph[i][j] = graph[i][k] + graph[k][j]
return graph
if __name__ == "__main__":
INF = 1e8
graph = [
[0, 5, INF, 8],
[7, 0, 9, INF],
[2, INF, 0, 4],
[INF, INF, 3, 0]
]
result = floyd(graph)
for i in result:
print(i)
[0, 5, 11, 8]
[7, 0, 9, 13]
[2, 7, 0, 4]
[5, 10, 3, 0]