Struct prepona::algo::VertexEdgeCut[][src]

pub struct VertexEdgeCut<'a, W, E: Edge<W>> { /* fields omitted */ }

Finds cut vertices(articulation points) and cut edges(bridges).

Examples

use prepona::prelude::*;
use prepona::storage::Mat;
use prepona::graph::MatGraph;
use prepona::algo::VertexEdgeCut;

// Given:
//            .-- c --.
//            |       |
//      a --- b ----- d --- e
//
let mut graph = MatGraph::init(Mat::<usize>::init());
let a = graph.add_vertex();
let b = graph.add_vertex();
let c = graph.add_vertex();
let d = graph.add_vertex();
let e = graph.add_vertex();
let ab = graph.add_edge_unchecked(a, b, 1.into());
graph.add_edge_unchecked(b, c, 1.into());
graph.add_edge_unchecked(c, d, 1.into());
graph.add_edge_unchecked(b, d, 1.into());
let de = graph.add_edge_unchecked(d, e, 1.into());

let (cut_vertices, cut_edges) = VertexEdgeCut::init(&graph).execute(&graph);

assert_eq!(cut_vertices.len(), 2);
assert!(vec![b, d]
    .iter()
    .all(|vertex_id| cut_vertices.contains(vertex_id)));
assert_eq!(cut_edges.len(), 2);
assert!(vec![ab, de].into_iter().all(|edge_id| cut_edges
    .iter()
    .find(|(_, _, edge)| edge.get_id() == edge_id)
    .is_some()))

Implementations

impl<'a, W, E: Edge<W>> VertexEdgeCut<'a, W, E>[src]

pub fn init<G>(graph: &G) -> Self where
    G: Vertices + Edges<W, E> + Graph<W, E, UndirectedEdge>, 
[src]

Initializes the structure.

pub fn execute<G>(self, graph: &'a G) -> (Vec<usize>, Vec<(usize, usize, &E)>) where
    G: Vertices + Edges<W, E> + Graph<W, E, UndirectedEdge>, 
[src]

Finds cut vertices(articulation points) and cut edges(bridges).

Arguments

graph: Graph to search for cut vertices and edges in it.

Returns

Cut vertices(first) and cut edges(second).
Cut vertices will be a vector of vertex ids.
Cut edges will be vector of (src_id, dst_id, edge reference).

Auto Trait Implementations

impl<'a, W, E> RefUnwindSafe for VertexEdgeCut<'a, W, E> where
    E: RefUnwindSafe,
    W: RefUnwindSafe

impl<'a, W, E> Send for VertexEdgeCut<'a, W, E> where
    E: Sync,
    W: Send

impl<'a, W, E> Sync for VertexEdgeCut<'a, W, E> where
    E: Sync,
    W: Sync

impl<'a, W, E> Unpin for VertexEdgeCut<'a, W, E> where
    W: Unpin

impl<'a, W, E> UnwindSafe for VertexEdgeCut<'a, W, E> where
    E: RefUnwindSafe,
    W: UnwindSafe

Blanket Implementations

impl<T> Any for T where
    T: 'static + ?Sized
[src]

impl<T> Borrow<T> for T where
    T: ?Sized
[src]

impl<T> BorrowMut<T> for T where
    T: ?Sized
[src]

impl<T> From<T> for T[src]

impl<T, U> Into<U> for T where
    U: From<T>, 
[src]

impl<T, U> TryFrom<U> for T where
    U: Into<T>, 
[src]

type Error = Infallible

The type returned in the event of a conversion error.

impl<T, U> TryInto<U> for T where
    U: TryFrom<T>, 
[src]

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.