Same as Kahn's Algorithm, here we need to return True -> if all nodes are traversed i.e. all dependencies will be resolved, else False
package pep.Day44;
import java.util.*;
public class LeetCode_207_Course_Schedule {
public static void main(String[] args) {
System.out.println(canFinish(2, new int[][]{{1, 0}}));
}
public static boolean canFinish(int n, int[][] pre) {
ArrayList<Integer>[] graph = new ArrayList[n];
for (int i = 0; i < n; i++) {
graph[i] = new ArrayList<>();
}
int[] indegree = new int[n];
for (int[] p : pre) {
graph[p[0]].add(p[1]);
indegree[p[1]]++;
}
Queue<Integer> que = new LinkedList<>();
for (int i = 0; i < indegree.length; i++) {
if (indegree[i] == 0)
que.add(i);
}
ArrayList<Integer> ans = new ArrayList<Integer>();
while (!que.isEmpty()) {
int rem = que.remove();
ans.add(rem);
for (int nbr : graph[rem]) {
if (--indegree[nbr] == 0) {
que.add(nbr);
}
}
}
return n == ans.size();
}
}
No comments:
Post a Comment