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使用小技巧:提取方法代码片段

第四季-专题1-课程规划与学习方法

片段中的 super.onCreateView

详细实例说明+典型案例实现 对动态规划法进行全面分析 | C++

有没有办法将2个非常相似的代码片段组合成一个函数并重复?

如何在机器人工程培养方案中实现全栈ROS机器人工程师课程规划总结篇(2021之1024)