LC-210 课程规划2
Posted leo-lzj
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LC-210 课程规划2相关的知识,希望对你有一定的参考价值。
主要问题:
输入课程数量,以及课程的前序条件(以[1, 0]形式,代表上课程1之前需要先上课程0),输出按什么顺序才能上完所有课,不能则输出空数组。
思路:
考虑到题目输入课程的前序条件的形式,可以看成每一门课是图论里的节点,而谦虚条件则是点到点之间的边。所以这里我们用拓扑排序,就能输出一个合法的序列。拓扑排序通常用来“排序”具有依赖关系的任务。
拓扑排序:
1. 找出入度为0的节点
2. 在图中除去该点,以及它的所有边
3. 重复1,2直到图中无节点。
代码:
1 class Solution { 2 public: 3 vector<int> findOrder(int numCourses, vector<pair<int, int>>& prerequisites) { 4 int *vector_in_degree = new int[numCourses](); 5 for (int i = 0; i < prerequisites.size(); i++) { 6 vector_in_degree[prerequisites[i].first]++; 7 } 8 vector<int> answer; 9 for (int i = 0; i < numCourses; i++) { 10 for (int j = 0; j < numCourses; j++) { 11 if (vector_in_degree[j] == 0) { 12 answer.push_back(j); 13 vector_in_degree[j] = -1; 14 for (int k = 0; k < prerequisites.size(); k++) { 15 if (prerequisites[k].second == j) 16 vector_in_degree[prerequisites[k].first]--; 17 } 18 break; 19 } 20 } 21 if (answer.size() != i + 1) { 22 answer.clear(); 23 return answer; 24 } 25 } 26 delete [] vector_in_degree; 27 return answer; 28 } 29 };
以上是关于LC-210 课程规划2的主要内容,如果未能解决你的问题,请参考以下文章
Android课程---Android Studio使用小技巧:提取方法代码片段