Skip to main content

floyd_warshall

Function floyd_warshall 

Source
pub fn floyd_warshall(g: &Graph) -> Vec<Vec<Option<i64>>>
Expand description

Floyd-Warshallbarcha juftliklar orasidagi eng qisqa masofalar.

G’oya (dinamik dasturlash): k ni 0 dan V-1 gacha yurgizib, “faqat 0..=k tugunlaridan o’tishga ruxsat berilsa, i dan j gacha eng qisqa masofa qancha?” degan savolga javob beramiz. Uch qatorli tsikl — algoritmning butun mohiyati:

d[i][j] = min(d[i][j], d[i][k] + d[k][j])
  • Time: O(V³), Space: O(V²).
  • Kichik graflarda (V ≤ 500) juda qulay; manfiy qirralarga ruxsat (manfiy siklsiz).

§Misol

use rust_algorithms::graph::{Graph, floyd_warshall};

let mut g = Graph::new_directed(3);
g.add_edge(0, 1, 3);
g.add_edge(1, 2, 4);
g.add_edge(0, 2, 10);

let d = floyd_warshall(&g);
assert_eq!(d[0][2], Some(7)); // 0→1→2 = 7 < 10
assert_eq!(d[2][0], None);    // teskari yo'l yo'q
assert_eq!(d[1][1], Some(0));