1
1
/*
2
- bfs
3
- This problem requires you to implement a basic BFS algorithm
2
+ bfs
3
+ This problem requires you to implement a basic BFS algorithm
4
4
*/
5
5
6
6
//I AM NOT DONE
7
+
7
8
use std:: collections:: VecDeque ;
8
9
9
10
// Define a graph
10
11
struct Graph {
11
- adj : Vec < Vec < usize > > ,
12
+ adj : Vec < Vec < usize > > ,
12
13
}
13
14
14
15
impl Graph {
@@ -21,21 +22,31 @@ impl Graph {
21
22
22
23
// Add an edge to the graph
23
24
fn add_edge ( & mut self , src : usize , dest : usize ) {
24
- self . adj [ src] . push ( dest) ;
25
- self . adj [ dest] . push ( src) ;
25
+ self . adj [ src] . push ( dest) ;
26
+ self . adj [ dest] . push ( src) ;
26
27
}
27
28
28
29
// Perform a breadth-first search on the graph, return the order of visited nodes
29
30
fn bfs_with_return ( & self , start : usize ) -> Vec < usize > {
30
-
31
- //TODO
32
-
33
31
let mut visit_order = vec ! [ ] ;
32
+ let mut visited = vec ! [ false ; self . adj. len( ) ] ;
33
+ let mut queue = VecDeque :: new ( ) ;
34
+
35
+ queue. push_back ( start) ;
36
+ visited[ start] = true ;
37
+ while let Some ( node) = queue. pop_front ( ) {
38
+ visit_order. push ( node) ;
39
+ for & neighbor in & self . adj [ node] {
40
+ if !visited[ neighbor] {
41
+ visited[ neighbor] = true ;
42
+ queue. push_back ( neighbor) ;
43
+ }
44
+ }
45
+ }
34
46
visit_order
35
47
}
36
48
}
37
49
38
-
39
50
#[ cfg( test) ]
40
51
mod tests {
41
52
use super :: * ;
@@ -84,4 +95,3 @@ mod tests {
84
95
assert_eq ! ( visited_order, vec![ 0 ] ) ;
85
96
}
86
97
}
87
-
0 commit comments