pub fn bellman_ford(g: &Graph, start: usize) -> Option<Vec<Option<i64>>>Expand description
Bellman-Ford — manfiy og’irliklar bilan ham ishlaydi va manfiy siklni aniqlaydi.
G’oya: har bir qirrani V-1 marta “bo’shatamiz” (relax). Nima uchun V-1?
Chunki siklsiz eng qisqa yo’lda ko’pi bilan V-1 ta qirra bo’ladi.
V -iteratsiyada ham yaxshilanish bo’lsa — demak manfiy sikl bor.
- Time: O(V · E), Space: O(V).
- Manfiy sikl topilsa →
None.
Real qo’llanilishi: valyuta arbitraji (manfiy sikl = foyda), tarmoq marshrutlash (RIP protokoli).
§Misol
use rust_algorithms::graph::{Graph, bellman_ford};
let mut g = Graph::new_directed(4);
g.add_edge(0, 1, 4);
g.add_edge(0, 2, 5);
g.add_edge(1, 3, 5);
g.add_edge(2, 1, -3); // manfiy qirra — Dijkstra bu yerda xato qiladi
let d = bellman_ford(&g, 0).unwrap();
assert_eq!(d[1], Some(2)); // 0→2→1 = 5 + (−3) = 2
assert_eq!(d[3], Some(7));