summaryrefslogtreecommitdiff
path: root/graph-checker/src/compute.rs
diff options
context:
space:
mode:
authorAndrew Guschin <guschin@altlinux.org>2024-10-08 17:58:11 +0400
committerAndrew Guschin <guschin@altlinux.org>2024-10-08 17:58:11 +0400
commit9d088798160ed69bbf1f0c9db771943be8d38770 (patch)
tree5ebcffe9f52567e11ef5b210116b5e1b5f38206f /graph-checker/src/compute.rs
parenta3bb5d6be2967705b5907a8b130b0e32176b2e2d (diff)
wip
Diffstat (limited to 'graph-checker/src/compute.rs')
-rw-r--r--graph-checker/src/compute.rs62
1 files changed, 38 insertions, 24 deletions
diff --git a/graph-checker/src/compute.rs b/graph-checker/src/compute.rs
index a9e88ae..b14c2cd 100644
--- a/graph-checker/src/compute.rs
+++ b/graph-checker/src/compute.rs
@@ -5,49 +5,59 @@ pub fn dominating_numbers(g: Graph) -> (String, Option<u32>, u32) {
let line = g.to_g6();
let mut independent_dominating = None;
- let mut smallest_geodesic = None;
+ // let mut smallest_geodesic = None;
let mut geodesic_sets = Vec::new();
- let mut done = false;
+ // let mut done = false;
for cs in g.cutsets() {
- if done {
- break;
- }
+ // if done {
+ // break;
+ // }
let dom = cs.is_dominating_in(&g);
let idp = cs.graph.is_independent();
if independent_dominating.is_none() && dom && idp {
independent_dominating = Some(cs.cardinality as u32);
}
+ // let mut geodesics = Vec::new();
let mut visited = vec![0; g.size];
- for vx in &cs.vertices {
- if *vx == 1 {
- g.dfs(*vx as usize, &mut visited);
+ for a in 0..cs.graph.size {
+ if cs.vertices[a] == 1 {
+ continue;
}
- if visited.iter().sum::<usize>() == g.size {
- let geodesic_size: u32 = cs.vertices.iter().sum();
- if let Some(smallest_geodesic) = smallest_geodesic {
- if geodesic_size > smallest_geodesic {
- done = true;
- break;
+ for b in 0..cs.graph.size {
+ if cs.vertices[b] == 1 {
+ continue;
+ }
+ if a != b {
+ // let mut gds = g.get_geodesics(a, b);
+ for geod in g.get_geodesics(a, b) {
+ for i in geod {
+ visited[i] = 1;
+ }
}
- } else {
- smallest_geodesic = Some(geodesic_size);
+ // geodesics.append(&mut gds);
}
- println!("cs {:?}", cs.vertices);
- geodesic_sets.push(cs.vertices.clone());
}
}
+ if visited.iter().sum::<usize>() == g.size {
+ geodesic_sets.push(cs.vertices.clone());
+ }
}
- println!("geodesic_sets = {}", geodesic_sets.len());
+ // println!("geodesic_sets = {}", geodesic_sets.len());
let mut fg = g.size as u32;
- println!("start");
- for check in &geodesic_sets {
- println!("{:?}", check);
+ // println!("start");
+ for i in 0..geodesic_sets.len() {
+ let check = &geodesic_sets[i];
+ // println!("{:?}", check);
let mut verts = check.clone();
- for set in &geodesic_sets {
+ for j in 0..geodesic_sets.len() {
+ if i == j {
+ continue;
+ }
+ let set = &geodesic_sets[j];
for v in 0..g.size {
if check[v] == set[v] {
verts[v] = 0;
@@ -59,7 +69,11 @@ pub fn dominating_numbers(g: Graph) -> (String, Option<u32>, u32) {
fg = new_fg;
}
}
- println!("end");
+ // println!("end");
+
+ if fg != 0 && fg != g.size as u32 && fg != 1 {
+ println!("{line} {independent_dominating:?} {fg}");
+ }
(line, independent_dominating, fg)
}