File tree Expand file tree Collapse file tree 1 file changed +23
-27
lines changed Expand file tree Collapse file tree 1 file changed +23
-27
lines changed Original file line number Diff line number Diff line change 1
1
class Solution {
2
- public boolean canFinish (int numCourses , int [][] prerequisites ) {
2
+ public boolean canFinish (int nC , int [][] prerequisites ) {
3
3
ArrayList <ArrayList <Integer >> adj = new ArrayList <>();
4
- for (int i =0 ;i <numCourses ;i ++){
4
+ for (int i =0 ;i <nC ;i ++){
5
5
adj .add (new ArrayList <>());
6
6
}
7
-
8
- for (int i =0 ;i <prerequisites .length ;i ++){
9
- adj .get (prerequisites [i ][0 ]).add (prerequisites [i ][1 ]);
7
+ for (int [] pre : prerequisites ){
8
+ adj .get (pre [1 ]).add (pre [0 ]);
10
9
}
11
- int [] indeg =new int [numCourses ];
12
- for (int i =0 ;i <numCourses ;i ++){
13
- for (int ele :adj .get (i )){
14
- indeg [ele ]++;
10
+ int [] vis = new int [nC ];
11
+ for (int i =0 ;i <nC ;i ++){
12
+ if (vis [i ]==0 ){
13
+ if (dfs (i , vis , adj )) {
14
+ return false ;
15
+ }
15
16
}
17
+
16
18
}
19
+ return true ;
17
20
18
-
19
- Queue <Integer > que = new LinkedList <>();
20
- for (int i =0 ;i <numCourses ;i ++){
21
- if (indeg [i ]==0 ){
22
- que .offer (i );
23
- }
24
- }
25
- int cnt =0 ;
26
- while (!que .isEmpty ()){
27
- int nodes = que .poll ();
28
- cnt ++;
29
- for (int node : adj .get (nodes )){
30
- indeg [node ]--;
31
- if (indeg [node ]==0 ){
32
- que .offer (node );
21
+ }
22
+ public boolean dfs (int node , int [] vis ,ArrayList <ArrayList <Integer >> adj ){
23
+ vis [node ]=1 ;
24
+ for (int adjNode : adj .get (node )){
25
+ if (vis [adjNode ]==0 ){
26
+ if (dfs (adjNode ,vis ,adj )){
27
+ return true ;
33
28
}
29
+ }else if (vis [adjNode ]==1 ){
30
+ return true ;
34
31
}
35
32
}
36
- if (cnt == numCourses ){
37
- return true ;
38
- }
33
+ vis [node ]=2 ;
39
34
return false ;
40
35
}
36
+
41
37
}
You can’t perform that action at this time.
0 commit comments