安排课程-LintCode
2017-11-09 14:26
288 查看
你需要去上n门九章的课才能获得offer,这些课被标号为 0 到 n-1 。
有一些课程需要“前置课程”,比如如果你要上课程0,你需要先学课程1,我们用一个匹配来表示他们: [0,1]
给你课程的总数量和一些前置课程的需求,返回你为了学完所有课程所安排的学习顺序。
可能会有多个正确的顺序,你只要返回一种就可以了。如果不可能完成所有课程,返回一个空数组。
样例:
给定 n = 2, prerequisites = [[1,0]]
返回 [0,1]
给定 n = 4, prerequisites = [1,0],[2,0],[3,1],[3,2]]
返回 [0,1,2,3] or [0,2,1,3]
思路:
拓扑排序。
有一些课程需要“前置课程”,比如如果你要上课程0,你需要先学课程1,我们用一个匹配来表示他们: [0,1]
给你课程的总数量和一些前置课程的需求,返回你为了学完所有课程所安排的学习顺序。
可能会有多个正确的顺序,你只要返回一种就可以了。如果不可能完成所有课程,返回一个空数组。
样例:
给定 n = 2, prerequisites = [[1,0]]
返回 [0,1]
给定 n = 4, prerequisites = [1,0],[2,0],[3,1],[3,2]]
返回 [0,1,2,3] or [0,2,1,3]
思路:
拓扑排序。
#ifndef C616_H #define C616_H #include<iostream> #include<vector> #include<queue> #include<utility> using namespace std; class Solution { public: /* * @param numCourses: a total of n courses * @param prerequisites: a list of prerequisite pairs * @return: the course order */ vector<int> findOrder(int numCourses, vector<pair<int, int>> &prerequisites) { // write your code here vector<int> res; if (numCourses <= 0) return res; queue<int> que; vector<vector<int>> graph(numCourses);//构建邻接矩阵存放图 vector<int> indegree(numCourses,0); //存放每个节点的入度 for (auto c : prerequisites) { indegree[c.second]++; graph[c.first].push_back(c.second); } //将入度为0的节点入队 for (int i = 0; i < numCourses; ++i) { if (indegree[i] == 0) que.push(i); } //将队头节点插入到res的开始位置 while (!que.empty()) { int p = que.front(); res.insert(res.begin(),p); que.pop(); //遍历队头节点的邻接节点 for (int j = 0; j < graph[p].size(); ++j) { if (--indegree[graph[p][j]]==0) que.push(graph[p][j]); } } if (res.size() < numCourses) res.clear(); return res; } }; #endif
相关文章推荐
- lintcode安排课程答案
- LintCode 安排课程
- lintcode(616)安排课程
- 淘宝课程学习如何安排太原网络营销师强烈推荐
- 中科院计算所培训中心2016年三季度课程安排
- 后续课程安排
- HDU 1074 课程安排 (状态压缩+DP,经典)
- linux运维实战练习-2016年3月4日-3月19日课程作业(练习)安排
- 《对象程序设计》课程 课程设计、考试安排 及 教师建议(2014.06.30修正)
- LeetCode 207. Course Schedule(课程安排)
- 对于软件工程基础知识课程的希望与时间安排
- 2012年《新概念英语第二册》课程安排
- linux运维实战练习-2015年8月30日课程作业(练习)安排
- linux运维实战练习-2015年9月5日课程作业(练习)安排
- 12. (Map)已知某学校的教学课程内容安排如下
- 《走出软件作坊》接受采访,SD2.0大会专门安排课程,还有抽奖赠书
- 中科院计算所培训中心二季度课程安排
- 考勤助手——教务安排课程时序图
- 关于嵌入式Linux培训课程安排改革的思考
- 《走出软件作坊》接受采访,SD2.0大会专门安排课程,还有抽奖赠书