[−][src]Function rs_graph::algorithms::subgraph
pub fn subgraph<'g, 'h, G, H, P>(g: &'g G, predicate: P) -> H where
G: IndexDigraph<'g>,
H: Digraph<'h> + Buildable,
P: Fn(Item<G>) -> bool,
Return a subgraph.
The resulting graph contains all nodes and edges for which the predicate returns true.
Example
// Extract a bipartite subgraph. use rs_graph::LinkedListGraph; use rs_graph::traits::*; use rs_graph::classes; use rs_graph::algorithms::*; let g: LinkedListGraph = classes::complete_graph(7); let h: LinkedListGraph = subgraph(&g, |i| match i { Item::Node(u) => g.node_id(u) < 6, Item::Edge(e) => { let (u,v) = g.enodes(e); g.node_id(u) % 2 != g.node_id(v) % 2 } }); assert_eq!(h.num_nodes(), 6); assert_eq!(h.num_edges(), 3*3); for u in h.nodes() { let mut neighs = h.neighs(u).map(|(_,v)| h.node_id(v)).collect::<Vec<_>>(); neighs.sort(); assert_eq!(neighs, if h.node_id(u) % 2 == 0 { vec![1,3,5] } else { vec![0,2,4] }); }