pub fn floyd_warshall(g: &Graph) -> Vec<Vec<Option<i64>>>Expand description
Floyd-Warshall — barcha 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));