[LeetCode]Course Schedele II

来源:互联网 发布:电脑杀毒清理软件 编辑:程序博客网 时间:2024/04/30 04:51

树图相关问题,考虑抽象node到class,其中一般要包含node的val,前驱后继的list,是否visit。

本题深搜,遍历每个的前驱,如果成环则非法,不成环则合法,同时将res[N++]置为当前node的val。

https://leetcode.com/problems/course-schedule-ii/


public class Solution {    private int N = 0;        public int[] findOrder(int numCourses, int[][] prerequisites) {        int[] res = new int[numCourses];        Course[] courses = new Course[numCourses];        for (int i = 0; i < numCourses; i++) courses[i] = new Course(i);        for (int i = 0; i < prerequisites.length; i++) {            courses[prerequisites[i][0]].add(courses[prerequisites[i][1]]);        }        for (int i = 0; i < numCourses; i++) {            if (isCycle(courses[i], res)) return new int[0];        }        return res;    }        private boolean isCycle(Course course, int[] res) {        if (course.test) return false;        if (course.visit) return true;        course.visit = true;        for (Course c : course.pre) {            if (isCycle(c, res)) return true;        }        res[N++] = course.label;        course.test = true;        return false;    }        class Course {        boolean test = false;        boolean visit = false;        int label;        ArrayList<Course> pre = new ArrayList<>();        public Course(int label) {            this.label = label;        }        public void add(Course c) {            pre.add(c);        }    }}


0 0
原创粉丝点击