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
76use std:: collections:: HashSet ;
87
98struct Graph {
10- adj : Vec < Vec < usize > > ,
9+ adj : Vec < Vec < usize > > ,
1110}
1211
1312impl 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