Menu
CoddyTech

Floyd Warshall Algorithm

Graf berarah dengan n node yang diberi nomor dari 0 hingga n-1 diberikan sebagai matriks berukuran n kali n: matrix[i][j] adalah bobot sisi dari node i ke node j, atau -1 jika tidak ada sisi, dan matrix[i][i] adalah 0. Panjang suatu jalur adalah jumlah bobot sisi-sisinya.

Kembalikan matriks berukuran n kali n dengan entri [i][j] berupa panjang jalur terpendek dari node i ke node j, atau -1 jika node j tidak dapat dicapai dari node i.

Fungsi

shortestDistances(matrix: integer-2d-array) → integer-2d-array
matrixinteger-2d-array
bobot sisi: matrix[i][j] adalah bobot sisi dari i ke j, atau -1 jika tidak ada
Mengembalikaninteger-2d-array
jarak terpendek untuk setiap pasangan simpul, -1 jika tidak ada jalur

Batasan

  • 1 ≤ n ≤ 100, dengan n = matrix.length = matrix[i].length
  • matrix[i][i] = 0
  • Untuk i ≠ j, matrix[i][j] bernilai -1 (tidak ada sisi) atau 0 ≤ matrix[i][j] ≤ 1000.
  • Edge hanya memiliki satu arah: matrix[i][j] dan matrix[j][i] tidak saling bergantung.

Contoh

Input
matrix = [[0, 4, 11, -1], [-1, 0, 2, 9], [1, -1, 0, 3], [-1, -1, -1, 0]]
Output
[[0, 4, 6, 9], [3, 0, 2, 5], [1, 5, 0, 3], [-1, -1, -1, 0]]
Penjelasan
Melalui node 1, node 0 mencapai node 2 dengan jarak 6, bukan 11, dan node 3 dengan jarak 9. Node 1 mencapai node 0 melalui node 2 dengan jarak 3. Tidak ada jalur yang keluar dari node 3, jadi nilainya -1 pada baris tersebut di luar diagonal.
challenge icon

Pertanyaan lanjutan

Setelah kamu membangun tabel, satu sisi menjadi lebih murah. Bisakah kamu memperbarui setiap jarak dalam O(n²) alih-alih menjalankan ulang perulangan O(n³)?

Reset kode
def shortestDistances(matrix):
    # Tulis kodemu di sini

Tes #1

Tes #2

Argumen

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

Output yang diharapkan

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