Fork me on GitHub

Course Schedule II

Description

https://leetcode.com/problems/course-schedule-ii/description/

Solution

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
class Solution {
public:
vector<int> findOrder(int numCourses, vector<pair<int, int>>& prerequisites) {
vector<int> degree(numCourses, 0);
vector<vector<int>> graph(numCourses, vector<int>() );
vector<int> ret;
for (auto& pa : prerequisites) {
degree[pa.first] += 1;
graph[pa.second].push_back(pa.first);
}
queue<int> waitingList;
for (int i = 0; i < numCourses; ++i) {
if (degree[i] == 0){
waitingList.push(i);
ret.push_back(i);
}
}
while (!waitingList.empty()) {
int item = waitingList.front();
waitingList.pop();
vector<int>& lis = graph[item];
for (int item : lis) {
--degree[item];
if (degree[item] == 0) {
waitingList.push(item);
ret.push_back(item);
}
}
}

for (int i = 0; i < numCourses; ++i)
if (degree[i] != 0) return vector<int>();

return ret;
}
};