-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathDay29.cpp
40 lines (38 loc) · 1.22 KB
/
Day29.cpp
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
37
38
39
40
/*
Author: Aryan Yadav
Course Schedule
Algorithm: Graphs
Difficulty: Medium
*/
class Solution {
public:
bool canFinish(int numCourses, vector<vector<int>>& prerequisites) {
queue<int> zeroInDegree;
unordered_map<int, unordered_set<int>> inDegree;
unordered_map<int, unordered_set<int>> outDegree;
for (int i = 0; i < prerequisites.size(); ++i) {
inDegree[prerequisites[i][0]].insert(prerequisites[i][1]);
outDegree[prerequisites[i][1]].insert(prerequisites[i][0]);
}
for(int i = 0; i < numCourses; ++i) {
if(inDegree.find(i) == inDegree.end()) {
zeroInDegree.push(i);
}
}
while(!zeroInDegree.empty()) {
int prerequisite = zeroInDegree.front();
zeroInDegree.pop();
for (const auto & course: outDegree[prerequisite]) {
inDegree[course].erase(prerequisite);
if (inDegree[course].empty()) {
zeroInDegree.push(course);
}
}
outDegree.erase(prerequisite);
}
if (!outDegree.empty()) {
return false;
}
return true;
}
};