icentral_bcc/
find_biconnected_component.rs1crate::ix!();
2
3pub trait FindBiconnectedComponent {
4
5    fn find_bicon_component<GH: BccGraphHashInterface>(&mut self, out_vec: &mut Vec<GH>);
6}
7
8impl<T> FindBiconnectedComponent for T 
9where T: Sized + NumNodes + Named + GetNeighborsForNode
10{
11    fn find_bicon_component<GH: BccGraphHashInterface>(&mut self, out_vec: &mut Vec<GH>) {
12
13        debug!("initiating Graph::find_bicon_component");
14
15        let size = self.num_nodes();
16        
17        let mut time: f64 = 0.0;
18
19        let mut u: NodeId = NodeId::zero();
20
21        let color_vec_name = name![self.name(), "find_bicon_component::color_vec"];
22        let pred_vec_name  = name![self.name(), "find_bicon_component::pred_vec"];
23        let distances_name = name![self.name(), "find_bicon_component::distances"];
24        let low_vec_name   = name![self.name(), "find_bicon_component::low_vec"];
25
26        let mut color_vec = ColorMap::new(size, color_vec_name);
27        let mut pred_vec  = PredecessorMap::new(size, pred_vec_name);
28
29        let mut distances = DistanceMap::new(size, distances_name);
30        let mut low_vec   = DistanceMap::new(size, low_vec_name);
31
32        let mut edge_stack: Stack::<Edge> = default!();
33
34        let mut ctx = BccDfsVisitorContext {
35            color_vec:  &mut color_vec, 
36            low_vec:    &mut low_vec, 
37            distances:  &mut distances, 
38            pred_vec:   &mut pred_vec, 
39            edge_stack: &mut edge_stack, 
40            time:       &mut time, 
41        };
42
43        bcc_dfs_visitor(
44            self,
45            u, 
46            &mut ctx,
47            out_vec
48        );
49    }
50}