美文网首页Leetcode
Leetcode.210.Course Schedule II

Leetcode.210.Course Schedule II

作者: Jimmy木 | 来源:发表于2019-12-03 16:53 被阅读0次

    题目

    给一个数n是课程号,需要完成0到n-1的课程。
    给定一个二维数组,分别是课程和需求先完成的课程,可能有课程冲突[0,1],[1,0]。
    输出上课顺序,如果有冲突返回空。

    Input:2, [[1,0]]
    Output:[0,1]
    Input:4, [[1,0],[2,0],[3,1],[3,2]]
    Output:[0,1,2,3] or [0,2,1,3]
    

    思路

    BFS。

    vector<int> findOrder(int numCourses, vector<vector<int>>& prerequisites) {
        unordered_map<int,vector<int>> m_map;
        vector<int> m_vec(numCourses,0);
        int doneCourse = 0;
        for (vector<int> vec : prerequisites) {
            m_map[vec[1]].push_back(vec[0]);
            m_vec[vec[0]]++;
        }
        queue<int> q;
        vector<int> res;
        for (int i = 0; i < numCourses; i++) {
            if (m_vec[i] == 0) {
                q.push(i);
                res.push_back(i);
                doneCourse++;
            }
        }
        while (!q.empty()) {
            if (doneCourse == numCourses) {
                return res;
            }
            int top = q.front();
            q.pop();
            vector<int> courses = m_map[top];
            for (int course : courses) {
                m_vec[course]--;
                if (m_vec[course] == 0) {
                    doneCourse++;
                    q.push(course);
                    res.push_back(course);
                }
            }
        }
    
        return vector<int>();
    }
    

    总结

    熟练使用BFS和DFS。

    相关文章

      网友评论

        本文标题:Leetcode.210.Course Schedule II

        本文链接:https://www.haomeiwen.com/subject/pfxhgctx.html