summaryrefslogtreecommitdiff
path: root/graph-checker
diff options
context:
space:
mode:
Diffstat (limited to 'graph-checker')
-rw-r--r--graph-checker/src/compute.rs35
-rw-r--r--graph-checker/src/main.rs2
2 files changed, 24 insertions, 13 deletions
diff --git a/graph-checker/src/compute.rs b/graph-checker/src/compute.rs
index e166e14..0beaad9 100644
--- a/graph-checker/src/compute.rs
+++ b/graph-checker/src/compute.rs
@@ -7,17 +7,23 @@ pub async fn dominating_numbers(
let mut independent_dominating = None;
let mut geodesic_sets = Vec::new();
- let mut min_size = g.size as u32;
+ let mut min_size = g.size;
for cs in g.cutsets() {
- 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);
+ if independent_dominating.is_none() {
+ let dom = cs.is_dominating_in(&g);
+ let idp = cs.graph.is_independent();
+ if dom && idp {
+ independent_dominating = Some(cs.cardinality as u32);
+ }
+ }
+
+ if cs.cardinality > min_size {
+ continue;
}
let mut visited = vec![0; g.size];
- for a in 0..cs.graph.size {
+ 'outer: for a in 0..cs.graph.size {
if cs.vertices[a] == 0 {
continue;
}
@@ -32,20 +38,22 @@ pub async fn dominating_numbers(
}
}
}
+ if visited.iter().sum::<usize>() == g.size {
+ break 'outer;
+ }
}
}
if visited.iter().sum::<usize>() == g.size {
geodesic_sets.push(cs.vertices.clone());
- let tmp = cs.vertices.into_iter().sum::<u32>();
- if tmp < min_size {
- min_size = tmp;
+ if cs.cardinality < min_size {
+ min_size = cs.cardinality;
}
}
}
let geodesic_sets: Vec<_> = geodesic_sets
.into_iter()
- .filter(|s| s.iter().sum::<u32>() == min_size)
+ .filter(|s| s.iter().sum::<u32>() == min_size as u32)
.collect();
let mut fg = None;
@@ -72,10 +80,13 @@ pub async fn dominating_numbers(
fg = Some(new_fg);
}
}
+ if let Some(fg) = fg {
+ if fg == 1 {
+ break;
+ }
+ }
}
}
- // println!("{line} {independent_dominating:?} {fg:?}");
-
(line, independent_dominating, fg)
}
diff --git a/graph-checker/src/main.rs b/graph-checker/src/main.rs
index f38724c..25a7768 100644
--- a/graph-checker/src/main.rs
+++ b/graph-checker/src/main.rs
@@ -31,7 +31,7 @@ async fn main() -> Result<(), sqlx::Error> {
println!("Started");
let start = Instant::now();
- const BATCH_SIZE: usize = 1000;
+ const BATCH_SIZE: usize = 10000;
let mut count = 0;
loop {
let graphs = gi.take(BATCH_SIZE);