207 Course Schedule

来源:互联网 发布:墨鲤抄 淘宝 编辑:程序博客网 时间:2024/06/04 18:14

参考了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;    }}
0 0
原创粉丝点击