diff options
| author | Andrew Guschin <guschin@altlinux.org> | 2024-10-08 17:58:11 +0400 |
|---|---|---|
| committer | Andrew Guschin <guschin@altlinux.org> | 2024-10-08 17:58:11 +0400 |
| commit | 9d088798160ed69bbf1f0c9db771943be8d38770 (patch) | |
| tree | 5ebcffe9f52567e11ef5b210116b5e1b5f38206f /graph-checker/src/compute.rs | |
| parent | a3bb5d6be2967705b5907a8b130b0e32176b2e2d (diff) | |
wip
Diffstat (limited to 'graph-checker/src/compute.rs')
| -rw-r--r-- | graph-checker/src/compute.rs | 62 |
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) } |