Skip to content

Commit 065b10d

Browse files
committed
Create 0207-course-schedule.rs
1 parent d1f1400 commit 065b10d

File tree

1 file changed

+40
-0
lines changed

1 file changed

+40
-0
lines changed

rust/0207-course-schedule.rs

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
impl Solution {
2+
pub fn can_finish(num_courses: i32, prerequisites: Vec<Vec<i32>>) -> bool {
3+
let mut graph = vec![vec![]; num_courses as usize];
4+
let mut visited = vec![0; num_courses as usize];
5+
6+
for edge in prerequisites {
7+
graph[edge[0] as usize].push(edge[1] as usize);
8+
}
9+
10+
for i in 0..num_courses as usize {
11+
if !Self::dfs(i, &graph, &mut visited) {
12+
return false;
13+
}
14+
}
15+
16+
true
17+
}
18+
19+
fn dfs(i: usize, graph: &Vec<Vec<usize>>, visited: &mut Vec<i32>) -> bool {
20+
if visited[i] == 1 {
21+
return false;
22+
}
23+
24+
if visited[i] == -1 {
25+
return true;
26+
}
27+
28+
visited[i] = 1;
29+
30+
for j in graph[i].iter() {
31+
if !Self::dfs(*j, graph, visited) {
32+
return false;
33+
}
34+
}
35+
36+
visited[i] = -1;
37+
38+
true
39+
}
40+
}

0 commit comments

Comments
 (0)