Skip to main content

rust_igraph/algorithms/flow/
mod.rs

1//! Network-flow algorithms (ALGO-FL-*).
2//!
3//! First entry: [`max_flow_value`] (`ALGO-FL-002`) — scalar
4//! maximum-flow value via Dinic's algorithm (BFS level graph + DFS
5//! blocking flow). Mirrors igraph C `igraph_maxflow_value` from
6//! `references/igraph/src/flow/flow.c`, which delegates to the
7//! Goldberg-Tarjan push-relabel `igraph_maxflow`. The scalar max-flow
8//! value is unique (max-flow / min-cut theorem) regardless of which
9//! algorithm produced it, so the two backends agree bit-for-bit on
10//! unit-capacity fixtures and within numerical tolerance on weighted
11//! ones.
12
13pub(crate) mod all_st_cuts;
14pub(crate) mod all_st_mincuts;
15pub(crate) mod dominator_tree;
16pub(crate) mod edge_connectivity;
17pub(crate) mod edge_disjoint_paths;
18pub(crate) mod gomory_hu_tree;
19pub(crate) mod max_flow;
20pub(crate) mod mincut;
21pub(crate) mod mincut_value;
22pub(crate) mod provan_shier;
23pub(crate) mod st_edge_connectivity;
24pub(crate) mod st_mincut;
25pub(crate) mod st_vertex_connectivity;
26pub(crate) mod vertex_connectivity;
27pub(crate) mod vertex_disjoint_paths;
28
29pub use all_st_cuts::{StCuts, all_st_cuts};
30pub use all_st_mincuts::{StMinCuts, all_st_mincuts};
31pub use dominator_tree::{DominatorMode, DominatorTree, dominator_tree};
32pub use edge_connectivity::{adhesion, edge_connectivity};
33pub use edge_disjoint_paths::edge_disjoint_paths;
34pub use gomory_hu_tree::{GomoryHuTree, gomory_hu_tree};
35pub use max_flow::{MaxFlow, max_flow, max_flow_value};
36pub use mincut::{Mincut, mincut};
37pub use mincut_value::mincut_value;
38pub use st_edge_connectivity::st_edge_connectivity;
39pub use st_mincut::{StMincut, st_mincut, st_mincut_value};
40pub use st_vertex_connectivity::{VconnNei, st_vertex_connectivity};
41pub use vertex_connectivity::{cohesion, vertex_connectivity};
42pub use vertex_disjoint_paths::vertex_disjoint_paths;