icentral_graph/
find_mucs.rs

1crate::ix!();
2
3impl<GH> FindMucs for Graph<GH> 
4
5where GH
6: GetEdges
7+ ClearMucs
8+ CreateNamedEmpty
9+ Debug
10+ BccGraphHashInterface
11+ ExtendWith<GH,Error=BetweennessCentralityError>
12+ FindConnectedComponents<GH,Error=BetweennessCentralityError>
13+ GetConnectedComponentSizes
14+ GetNeighborsForNode
15+ GetNodeIdRange
16+ HasMapForNode
17+ InsertEdge
18+ InsertNode
19+ IsValid
20+ MappedNodes
21+ NewFromCycleVec
22+ NewFromGraphRef<Self>
23+ NumEdges
24+ NumNodes
25+ RemoveBridges
26{
27    /// 1. find bridges
28    ///
29    /// 2. delete bridges
30    ///
31    /// 3. find connected components of size >=3
32    /// (these are MinimumUnionCycles)
33    ///
34    fn find_mucs_fast(&mut self) 
35    -> Result<(),BetweennessCentralityError> 
36    {
37        let mut bridge_vec: Vec<Edge> = self.find_bridge_edges::<GH>();
38
39        let mut gh: GH = GH::new_from_graph_ref(&*self, name![self.name(),"find_mucs_fast::gh"]);
40
41        gh.remove_bridges(bridge_vec);
42
43        let mut conn_comp_vec: Vec<GH> = gh.find_conn_comp()?;
44
45        self.construct_mucs(conn_comp_vec);
46
47        self.construct_single_node_mucs();
48
49        self.find_conn_verts();
50
51        self.find_all_muc_subgraphs();
52
53        debug!("DONE");
54
55        Ok(())
56    }
57
58    fn find_mucs(&mut self)  {
59        
60        //find_muc_mcb();
61        self.find_mucs_fast();
62    }
63}