Function rs_graph::algorithms::inverse
[−]
[src]
pub fn inverse<'g, 'h, G, H>(g: &'g G) -> H where
G: IndexDigraph<'g>,
H: Digraph<'h> + Buildable,
Returns the inverse directed graph of g
.
For $G=(V,A)$ the returned graph is $G=(V,A')$ with $A' := {(v,u) \colon (u,v) \in A}$.
Example
use rs_graph::{LinkedListGraph, IndexGraph, Graph, Digraph, Builder}; use rs_graph::algorithms::inverse; let mut g = LinkedListGraph::<usize>::new(); g.add_nodes(18); for u in g.nodes() { for v in g.nodes() { if g.node_id(v) > 0 && g.node_id(u) % g.node_id(v) == 0 { g.add_edge(u, v); } } } let h: LinkedListGraph = inverse(&g); assert_eq!(g.num_nodes(), h.num_nodes()); assert_eq!(g.num_edges(), h.num_edges()); for e in h.edges() { let (u,v) = (h.node_id(h.src(e)), h.node_id(h.snk(e))); assert!(u > 0 && v % u == 0); }