Skip to content

Commit 52ac41f

Browse files
author
build
committed
feat:exercises
1 parent f562f96 commit 52ac41f

File tree

1 file changed

+19
-12
lines changed

1 file changed

+19
-12
lines changed

exercises/algorithm/algorithm6.rs

Lines changed: 19 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,12 @@
11
/*
2-
dfs
3-
This problem requires you to implement a basic DFS traversal
2+
dfs
3+
This problem requires you to implement a basic DFS traversal
44
*/
55

6-
// I AM NOT DONE
76
use std::collections::HashSet;
87

98
struct Graph {
10-
adj: Vec<Vec<usize>>,
9+
adj: Vec<Vec<usize>>,
1110
}
1211

1312
impl Graph {
@@ -19,17 +18,26 @@ impl Graph {
1918

2019
fn add_edge(&mut self, src: usize, dest: usize) {
2120
self.adj[src].push(dest);
22-
self.adj[dest].push(src);
21+
self.adj[dest].push(src);
2322
}
2423

2524
fn dfs_util(&self, v: usize, visited: &mut HashSet<usize>, visit_order: &mut Vec<usize>) {
26-
//TODO
25+
if visited.contains(&v) {
26+
return;
27+
}
28+
29+
visited.insert(v);
30+
visit_order.push(v);
31+
32+
for &neighbor in &self.adj[v] {
33+
self.dfs_util(neighbor, visited, visit_order);
34+
}
2735
}
2836

2937
// Perform a depth-first search on the graph, return the order of visited nodes
3038
fn dfs(&self, start: usize) -> Vec<usize> {
3139
let mut visited = HashSet::new();
32-
let mut visit_order = Vec::new();
40+
let mut visit_order = Vec::new();
3341
self.dfs_util(start, &mut visited, &mut visit_order);
3442
visit_order
3543
}
@@ -56,7 +64,7 @@ mod tests {
5664
graph.add_edge(0, 2);
5765
graph.add_edge(1, 2);
5866
graph.add_edge(2, 3);
59-
graph.add_edge(3, 3);
67+
graph.add_edge(3, 3);
6068

6169
let visit_order = graph.dfs(0);
6270
assert_eq!(visit_order, vec![0, 1, 2, 3]);
@@ -67,12 +75,11 @@ mod tests {
6775
let mut graph = Graph::new(5);
6876
graph.add_edge(0, 1);
6977
graph.add_edge(0, 2);
70-
graph.add_edge(3, 4);
78+
graph.add_edge(3, 4);
7179

7280
let visit_order = graph.dfs(0);
73-
assert_eq!(visit_order, vec![0, 1, 2]);
81+
assert_eq!(visit_order, vec![0, 1, 2]);
7482
let visit_order_disconnected = graph.dfs(3);
75-
assert_eq!(visit_order_disconnected, vec![3, 4]);
83+
assert_eq!(visit_order_disconnected, vec![3, 4]);
7684
}
7785
}
78-

0 commit comments

Comments
 (0)