From 9d088798160ed69bbf1f0c9db771943be8d38770 Mon Sep 17 00:00:00 2001 From: Andrew Guschin Date: Tue, 8 Oct 2024 17:58:11 +0400 Subject: wip --- graph-checker/src/graph.rs | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) (limited to 'graph-checker/src/graph.rs') 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, + mut visited: Vec, paths: &mut Vec>, ) { 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) -> usize { -- cgit v1.2.3