-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcourse_schedule.cpp
More file actions
36 lines (31 loc) 路 1.09 KB
/
Copy pathcourse_schedule.cpp
File metadata and controls
36 lines (31 loc) 路 1.09 KB
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
// https://leetcode.com/problems/course-schedule/
class Solution {
public:
bool canFinish(int numCourses, vector<vector<int>>& prerequisites) {
// Kahn's Algorithm for cycle detection
vector<vector<int>>& pr = prerequisites;
int count = 0;
vector<int> in_degree(numCourses, 0);
vector<vector<int>> graph(numCourses);
deque<int> pdeque;
// Construct graph
for (int i = 0; i < pr.size(); i++) {
in_degree[pr[i][0]]++;
graph[pr[i][1]].push_back(pr[i][0]);
}
// Deque
for(int i = 0; i < numCourses; i++) {
if (in_degree[i] == 0) pdeque.push_back(i);
}
while(!pdeque.empty()) {
int current = pdeque.back();
pdeque.pop_back();
count++;
for(int i = 0; i < graph[current].size(); i++) {
in_degree[graph[current][i]]--;
if (in_degree[graph[current][i]] == 0) pdeque.push_back(graph[current][i]);
}
}
return count == numCourses;
}
};