1
+ // DFS
2
+ class Solution {
3
+ public:
4
+ bool dfs (int curr, vector<vector<int >>& graph, vector<int >& visited){
5
+ if (visited[curr] == 1 )
6
+ return false ;
7
+
8
+ if (visited[curr] == 2 )
9
+ return true ;
10
+
11
+ visited[curr] = 1 ;
12
+
13
+ for (int i = 0 ; i < graph[curr].size (); i++){
14
+ if (dfs (graph[curr][i], graph, visited) == false )
15
+ return false ;
16
+ }
17
+
18
+ visited[curr] = 2 ;
19
+
20
+ return true ;
21
+ }
22
+
23
+ bool canFinish (int numCourses, vector<vector<int >>& prerequisites) {
24
+ vector<vector<int >> graph (numCourses);
25
+ vector<int > visited (numCourses, 0 );
26
+
27
+ for (int i = 0 ; i < prerequisites.size (); i++){
28
+ int course = prerequisites[i][0 ];
29
+ int pre = prerequisites[i][1 ];
30
+
31
+ graph[pre ].push_back (course);
32
+ }
33
+
34
+ for (int i = 0 ; i < numCourses; i++){
35
+ if (dfs (i, graph, visited) == false )
36
+ return false ;
37
+ }
38
+
39
+ return true ;
40
+ }
41
+ };
42
+
43
+ // BFS
44
+ class Solution {
45
+ public:
46
+ bool canFinish (int numCourses, vector<vector<int >>& prerequisites) {
47
+ vector<vector<int >> graph (numCourses);
48
+ vector<int > inDegree (numCourses, 0 );
49
+
50
+ for (int i = 0 ; i < prerequisites.size (); i++){
51
+ int course = prerequisites[i][0 ];
52
+ int pre = prerequisites[i][1 ];
53
+
54
+ graph[pre ].push_back (course);
55
+ inDegree[course]++;
56
+ }
57
+
58
+ queue<int > q;
59
+
60
+ for (int i = 0 ; i < numCourses; i++){
61
+ if (inDegree[i] == 0 )
62
+ q.push (i);
63
+ }
64
+
65
+ int count = 0 ;
66
+
67
+ while (!q.empty ()){
68
+ int curr = q.front ();
69
+ q.pop ();
70
+ count++;
71
+
72
+ for (int i = 0 ; i < graph[curr].size (); i++){
73
+ if (--inDegree[graph[curr][i]] == 0 )
74
+ q.push (graph[curr][i]);
75
+ }
76
+ }
77
+
78
+ return count == numCourses;;
79
+ }
80
+ };
0 commit comments