Menu
CoddyTech

Floyd Warshall Algorithm

n düğümlü, 0 ile n-1 arasında numaralandırılmış yönlü bir çizge, n çarpı n boyutunda bir matris olarak verilmiştir: matrix[i][j], i düğümünden j düğümüne giden kenarın ağırlığıdır veya böyle bir kenar yoksa -1 değerini alır; matrix[i][i] ise 0 değerini alır. Bir yolun uzunluğu, kenar ağırlıklarının toplamıdır.

Her bir [i][j] girdisi, i düğümünden j düğümüne giden en kısa yolun uzunluğunu ya da i düğümünden j düğümüne ulaşılamıyorsa -1 değerini içeren n çarpı n boyutunda bir matris döndür.

Fonksiyon

shortestDistances(matrix: integer-2d-array) → integer-2d-array
matrixinteger-2d-array
kenar ağırlıkları: matrix[i][j], i düğümünden j düğümüne olan kenarın ağırlığıdır veya kenar yoksa -1'dir
Döndürürinteger-2d-array
her düğüm çifti arasındaki en kısa mesafe; yol yoksa -1

Kısıtlar

  • 1 ≤ n ≤ 100, burada n = matrix.length = matrix[i].length
  • matrix[i][i] = 0
  • i ≠ j olduğunda, matrix[i][j] değeri -1 (kenar yok) ya da 0 ≤ matrix[i][j] ≤ 1000 olur.
  • Kenarlar tek yönlüdür: matrix[i][j] ve matrix[j][i] birbirinden bağımsızdır.

Örnekler

Girdi
matrix = [[0, 4, 11, -1], [-1, 0, 2, 9], [1, -1, 0, 3], [-1, -1, -1, 0]]
Çıktı
[[0, 4, 6, 9], [3, 0, 2, 5], [1, 5, 0, 3], [-1, -1, -1, 0]]
Açıklama
1 numaralı düğüm üzerinden, 0 numaralı düğüm 2 numaralı düğüme 11 yerine 6 maliyetle ve 3 numaralı düğüme 9 maliyetle ulaşır. 1 numaralı düğüm, 2 numaralı düğüm üzerinden 0 numaralı düğüme 3 maliyetle ulaşır. 3 numaralı düğümden hiçbir yere çıkış olmadığından, satırının köşegen dışındaki değeri -1'dir.
challenge icon

Ek soru

Tabloyu oluşturduktan sonra bir kenarın maliyeti düşer. O(n³) döngülerini yeniden çalıştırmak yerine O(n²) içinde tüm uzaklıkları güncelleyebilir misin?

Kodu sıfırla
def shortestDistances(matrix):
    # Kodu buraya yazın

Test #1

Test #2

Argüman

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

Beklenen Çıktı

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