summaryrefslogtreecommitdiff
path: root/graph-checker/src/graph.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/graph.rs
parenta3bb5d6be2967705b5907a8b130b0e32176b2e2d (diff)
wip
Diffstat (limited to 'graph-checker/src/graph.rs')
-rw-r--r--graph-checker/src/graph.rs17
1 files changed, 12 insertions, 5 deletions
diff --git a/graph-checker/src/graph.rs b/graph-checker/src/graph.rs
index fd6fa63..bb0fb03 100644
--- a/graph-checker/src/graph.rs
+++ b/graph-checker/src/graph.rs
@@ -288,24 +288,31 @@ impl Graph {
next: usize,
to: usize,
path: Vec<usize>,
+ mut visited: Vec<usize>,
paths: &mut Vec<Vec<usize>>,
) {
if next == to {
paths.push(path.clone());
return;
}
+ visited[next] = 1;
+ // println!("{next} {to} {path:?}");
for i in 0..g.size {
- if g.matrix[next][i] != 0 {
+ if visited[i] != 1 && g.matrix[next][i] != 0 {
let mut p = path.clone();
p.push(i);
- dfs(g, i, to, p, paths);
+ dfs(g, i, to, p, visited.clone(), paths);
}
}
}
let mut paths = Vec::new();
- dfs(self, from, to, vec![from], &mut paths);
- let d = paths.iter().map(Vec::len).min().unwrap();
- return paths.into_iter().filter(|p| p.len() == d).collect();
+ let visited = vec![0; self.size];
+ dfs(self, from, to, vec![from], visited, &mut paths);
+
+ match paths.iter().map(Vec::len).min() {
+ Some(d) => paths.into_iter().filter(|p| p.len() == d).collect(),
+ None => Vec::new(),
+ }
}
fn count_components_partial(&self, included_vertices: &Vec<u32>) -> usize {