File tree Expand file tree Collapse file tree 1 file changed +41
-0
lines changed
src/main/java/com/fishercoder/solutions Expand file tree Collapse file tree 1 file changed +41
-0
lines changed Original file line number Diff line number Diff line change 2
2
3
3
import java .util .HashSet ;
4
4
import java .util .Iterator ;
5
+ import java .util .LinkedList ;
6
+ import java .util .Queue ;
5
7
import java .util .Set ;
6
8
7
9
public class _207 {
8
10
9
11
public static class Solution1 {
12
+ /**Kahn's algorithm for topological sorting*/
10
13
public boolean canFinish (int numCourses , int [][] prerequisites ) {
11
14
int [] indegree = new int [numCourses ];
12
15
for (int [] prereq : prerequisites ) {
@@ -44,4 +47,42 @@ public boolean canFinish(int numCourses, int[][] prerequisites) {
44
47
return true ;
45
48
}
46
49
}
50
+
51
+ public static class Solution2 {
52
+ /**
53
+ * BFS
54
+ */
55
+ public boolean canFinish (int numCourses , int [][] prerequisites ) {
56
+ int [] indegree = new int [numCourses ];
57
+ for (int [] pre : prerequisites ) {
58
+ indegree [pre [0 ]]++;
59
+ }
60
+ Queue <Integer > queue = new LinkedList ();
61
+ for (int i = 0 ; i < numCourses ; i ++) {
62
+ if (indegree [i ] == 0 ) {
63
+ queue .offer (i );
64
+ }
65
+ }
66
+ if (queue .isEmpty ()) {
67
+ return false ;
68
+ }
69
+ while (!queue .isEmpty ()) {
70
+ int course = queue .poll ();
71
+ for (int [] pre : prerequisites ) {
72
+ if (pre [1 ] == course ) {
73
+ indegree [pre [0 ]]--;
74
+ if (indegree [pre [0 ]] == 0 ) {
75
+ queue .offer (pre [0 ]);
76
+ }
77
+ }
78
+ }
79
+ }
80
+ for (int degree : indegree ) {
81
+ if (degree != 0 ) {
82
+ return false ;
83
+ }
84
+ }
85
+ return true ;
86
+ }
87
+ }
47
88
}
You can’t perform that action at this time.
0 commit comments