3. What will be the output of the following Rust code snippet detecting cycle in a directed graph?
fn main() {
let graph = vec![
vec![1], // 0 -> 1
vec![2], // 1 -> 2
vec![0], // 2 -> 0 forms a cycle
vec![4], // 3 -> 4
vec![] // 4 no outgoing edges
];
println!("{}", has_cycle(&graph));
}
fn has_cycle(graph: &Vec) -> bool {
let n = graph.len();
let mut visited = vec![false; n];
let mut rec_stack = vec![false; n];
for node in 0..n {
if !visited[node] && dfs(node, graph, &mut visited, &mut rec_stack) {
return true;
}
}
false
}
fn dfs(node: usize, graph: &Vec, visited: &mut Vec<bool>, rec_stack: &mut Vec<bool>) -> bool {
visited[node] = true;
rec_stack[node] = true;
for &neighbor in &graph[node] {
if !visited[neighbor] && dfs(neighbor, graph, visited, rec_stack) {
return true;
} else if rec_stack[neighbor] {
return true;
}
}
rec_stack[node] = false;
false
}