class Solution {
List<List<Integer>> edges;
boolean[] visited;
Set<Integer> set = new HashSet<>();
private boolean hasRing(int x) {
if (visited[x]) {
return true;
}
set.add(x);
visited[x] = true;
List<Integer> lst = edges.get(x);
for (int i : lst) {
if (visited[i]) {
return true;
}
if (set.contains(i)) {
continue;
}
if (hasRing(i)) {
return true;
}
}
visited[x] = false;
return false;
}
public boolean canFinish(int numCourses, int[][] prerequisites) {
edges = new ArrayList<>(numCourses);
for (int i = 0; i < numCourses; i++) {
edges.add(new ArrayList<>());
}
for (int[] prerequisite : prerequisites) {
edges.get(prerequisite[0]).add(prerequisite[1]);
}
visited = new boolean[numCourses];
for (int i = 0; i < numCourses; i++) {
if (set.contains(i)) {
continue;
}
if (hasRing(i)) {
return false;
}
}
return true;
}
}
08-12
585
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)
“相关推荐”对你有帮助么?
-
非常没帮助
-
没帮助
-
一般
-
有帮助
-
非常有帮助
提交