Menu
CoddyTech

Floyd Warshall Algorithm

n개의 노드가 있는 방향 그래프가 주어집니다. 노드의 번호는 0부터 n-1까지입니다. 이 그래프는 n x n 행렬로 주어지며, matrix[i][j]는 노드 i에서 노드 j로 가는 간선의 가중치입니다. 간선이 없으면 -1이고, matrix[i][i]는 0입니다. 경로의 길이는 해당 경로에 포함된 간선 가중치의 합입니다.

노드 i에서 노드 j까지의 최단 경로 길이를 [i][j] 항목에 담은 n x n 행렬을 반환하세요. 노드 i에서 노드 j에 도달할 수 없으면 -1을 담습니다.

함수

shortestDistances(matrix: integer-2d-array) → integer-2d-array
matrixinteger-2d-array
간선 가중치: matrix[i][j]는 i에서 j로 가는 간선의 가중치이며, 간선이 없으면 -1입니다
반환값integer-2d-array
모든 노드 쌍 사이의 최단 거리, 경로가 없는 경우 -1

제약 조건

  • 1 ≤ n ≤ 100, 여기서 n = matrix.length = matrix[i].length
  • matrix[i][i] = 0
  • i ≠ j인 경우, matrix[i][j]는 -1(간선 없음)이거나 0 ≤ matrix[i][j] ≤ 1000입니다.
  • 간선은 한 방향입니다: matrix[i][j]와 matrix[j][i]는 서로 독립적입니다.

예제

입력
matrix = [[0, 4, 11, -1], [-1, 0, 2, 9], [1, -1, 0, 3], [-1, -1, -1, 0]]
출력
[[0, 4, 6, 9], [3, 0, 2, 5], [1, 5, 0, 3], [-1, -1, -1, 0]]
설명
노드 0은 노드 1을 거쳐 노드 2에 11이 아닌 6의 비용으로 도달하고, 노드 3에는 9의 비용으로 도달합니다. 노드 1은 노드 2를 거쳐 노드 0에 3의 비용으로 도달합니다. 노드 3에서는 아무것도 나가지 않으므로, 대각선이 아닌 위치에 있는 해당 행의 값은 -1입니다.
challenge icon

후속 질문

테이블을 만든 뒤 간선 하나의 비용이 낮아집니다. O(n²) 반복문을 다시 실행하는 대신 O(n³)으로 모든 거리를 갱신할 수 있나요?

코드 초기화
def shortestDistances(matrix):
    # 여기에 코드를 작성하세요

테스트 #1

테스트 #2

인자

matrix = [[0, 4, 11, -1], [-1, 0, 2, 9], [1, -1, 0, 3], [-1, -1, -1, 0]]

예상 출력

[[0, 4, 6, 9], [3, 0, 2, 5], [1, 5, 0, 3], [-1, -1, -1, 0]]