Skip to main content

bellman_ford

Function bellman_ford 

Source
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));