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/graph.rs | |
| parent | a3bb5d6be2967705b5907a8b130b0e32176b2e2d (diff) | |
wip
Diffstat (limited to 'graph-checker/src/graph.rs')
| -rw-r--r-- | graph-checker/src/graph.rs | 17 |
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 { |