Leetcode Course Schedule II

来源:互联网 发布:浪漫庄园知乎 编辑:程序博客网 时间:2024/05/17 04:50

题意:给定一些课程的先后顺序,输出一个可行的修课顺序,如果没有则输出空集。

思路:简单拓扑排序,不断寻找入度为0的点。

class Solution {public:    vector<int> findOrder(int numCourses, vector<pair<int, int>>& prerequisites) {        vector<int> indegree(numCourses, 0);        vector<vector<int> >dm;        for(int i = 0; i < numCourses; ++ i) {            vector<int> temp;            dm.push_back(temp);        }                for(int i = 0; i < prerequisites.size(); ++ i) {            vector<int> temp = dm[prerequisites[i].second];            temp.push_back(prerequisites[i].first);            dm[prerequisites[i].second] = temp;            indegree[prerequisites[i].first] ++;        }        vector<int> re;        for(int i = 0; i < numCourses; ++ i) {            int node = -1;            for(int j = 0; j < indegree.size(); ++ j) {                if(indegree[j] == 0) {                    indegree[j] = -1;                    node = j;                    break;                }             }            if(node == -1) {                vector<int> temp;                return temp;            }            for(int j = 0; j < dm[node].size(); ++ j) {                indegree[dm[node][j]] --;            }                        re.push_back(node);        }                return re;    }};


0 0
原创粉丝点击