您的位置:首页 > 其它

207 Course Schedule

2015-11-28 07:29 357 查看
参考了geeksforgeeks 有向图寻找环。代码如下:

public class Solution {
public boolean canFinish(int numCourses, int[][] prerequisites) {
if (prerequisites == null || prerequisites.length == 0) {
return true;
}

Map<Integer, List<Integer>> map = new HashMap<Integer, List<Integer>>();
for (int i = 0; i < prerequisites.length; i++) {
int[] pair = prerequisites[i];
int from = pair[1];
int to = pair[0];
if (map.containsKey(from)) {
map.get(from).add(to);
} else {
List<Integer> list = new ArrayList<Integer>();
list.add(to);
map.put(from, list); // map 0, <1> || 1, empty
}

if (!map.containsKey(to)) {
map.put(to, new ArrayList<Integer>());
}
}

boolean[] visited = new boolean[numCourses];
boolean[] recStack = new boolean[numCourses];

for (int i : map.keySet()) {
if (isCyclic(i, visited, recStack, map)) {
return false;
}
}
return true;
}

private boolean isCyclic(int v, boolean[] visited, boolean[] recStack, Map<Integer, List<Integer>> map) {
if (!visited[v]) {
visited[v] = true;
recStack[v] = true;
List<Integer> adj = map.get(v);
for (int i = 0; i < adj.size(); i++) {
int num = adj.get(i);
if (!visited[num] && isCyclic(num, visited, recStack, map)) {
return true;
} else if (recStack[num]) {
return true;
}
}
}
recStack[v] = false;
return false;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  boolean