icentral_largest_bcc/
lbcc.rs1crate::ix!();
2
3pub struct LargestBiconnectedComponents<'g,'v,GH>
4where GH: BccGraphHashInterface
5{
6 graph: &'g Graph<GH>,
7
8 bcc_vec: &'v Vec<GH>,
9
10 lbcc_i: usize,
12
13 lbcc_j: usize,
15
16 lbcc_n: usize,
18
19 lbcc_m: usize,
21}
22
23impl<'g,'v,GH> fmt::Debug for LargestBiconnectedComponents<'g,'v,GH>
24where GH: BccGraphHashInterface
25{
26 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
27
28 let binding = f.debug_struct("LargestBiconnectedComponents");
29
30 let mut builder = binding;
31
32 if self.lbcc_i != self.lbcc_j {
33 builder.field("warning", &"LargestBiconnectedComponents_m is not LargestBiconnectedComponents_n!");
34 }
35
36 builder.field("num_nodes: {}", &self.num_nodes());
37 builder.field("num_edges: {}", &self.num_edges());
38 builder.field("frac_nodes: {}", &self.frac_nodes());
39 builder.field("frac_edges: {}", &self.frac_edges());
40
41 builder.finish()
42 }
43}
44
45impl<'g,'v,GH> NumNodes for LargestBiconnectedComponents<'g,'v,GH>
46where GH: BccGraphHashInterface
47{
48 fn num_nodes(&self) -> usize {
49 self.lbcc_n
50 }
51}
52
53impl<'g,'v,GH> NumEdges for LargestBiconnectedComponents<'g,'v,GH>
54where GH: BccGraphHashInterface
55{
56
57 fn num_edges(&self) -> usize {
58 self.bcc_vec[self.lbcc_i as usize].num_edges()
59 }
60}
61
62impl<'g,'v,GH> LargestBiconnectedComponents<'g,'v,GH>
63where GH: BccGraphHashInterface
64{
65 pub fn new(bcc_vec: &'v Vec<GH>, graph: &'g Graph<GH>) -> Self {
66
67 let mut lbcc_i: usize = 0; let mut lbcc_j: usize = 0; let mut lbcc_n: usize = 0; let mut lbcc_m: usize = 0; if bcc_vec.len() > 1 {
73
74 for i in 0..bcc_vec.len() {
75
76 if bcc_vec[i].num_nodes() > lbcc_n {
77
78 lbcc_n = bcc_vec[i].num_nodes();
79
80 lbcc_i = i;
81 }
82
83 if bcc_vec[i].num_edges() > lbcc_m {
84
85 lbcc_m = bcc_vec[i].num_edges();
86
87 lbcc_j = i;
88 }
89 }
90 }
91
92 Self {
93 graph,
94 bcc_vec,
95 lbcc_i,
96 lbcc_j,
97 lbcc_n,
98 lbcc_m,
99 }
100 }
101
102 pub fn frac_nodes(&self) -> f64 {
103 self.num_nodes() as f64 / self.graph.num_nodes() as f64
104 }
105
106 pub fn frac_edges(&self) -> f64 {
107 self.num_edges() as f64 / self.graph.num_edges() as f64
108 }
109}
110
111pub fn lbcc_stat<GH>(graph: &mut Graph<GH>)
118-> Result<(),BetweennessCentralityError>
119where GH: BccGraphHashInterface
120{
121 graph.print_header();
122
123 let mut bcc_vec: Vec<GH> = vec![];
124
125 graph.find_bicon_component(&mut bcc_vec);
126
127 let stat = LargestBiconnectedComponents::new(&bcc_vec,&graph);
128
129 debug!("{:#?}", stat);
130
131 Ok(())
132}