course-schedule 1.0.0
Course Schedule
Loading...
Searching...
No Matches
main.cpp
Go to the documentation of this file.
1#include <bits/stdc++.h>
2
3using namespace std;
4
6{
7public:
8 bool canFinish(int numCourses, vector<vector<int>>& prerequisites)
9 {
10 unordered_map<int, list<int>> prereq_map; // int - node, list<int> - the node's prerequisites
11 for (vector<int>& node_prereq: prerequisites)
12 {
13 int node = node_prereq[0];
14 for (int i = 1; i < (int)node_prereq.size(); ++i)
15 (prereq_map[node]).push_back(node_prereq[i]);
16 }
17
18 set<int> visited;
19 set<int> rec_stk; // recursion stack
20 stack<int> node_stack;
21
22 int n = numCourses;
23 for (int i = 0; i < n; ++i)
24 {
25 if (visited.find(i) == visited.end())
26 {
27 node_stack.push(i);
28 while (!node_stack.empty())
29 {
30 int node = node_stack.top();
31 if (rec_stk.find(node) == rec_stk.end())
32 {
33 rec_stk.insert(node);
34 for (int neighbor : prereq_map[node])
35 {
36 if (rec_stk.find(neighbor) != rec_stk.end())
37 return false; // cycle detected
38 if (visited.find(neighbor) == visited.end())
39 node_stack.push(neighbor);
40 }
41 }
42 else
43 {
44 node_stack.pop();
45 rec_stk.erase(node);
46 visited.insert(node);
47 }
48 }
49 }
50 }
51 return true; // no cycle detected
52 }
53};
54
55int main()
56{
57
58 return 0;
59}
bool canFinish(int numCourses, vector< vector< int > > &prerequisites)
Definition main.cpp:8
int main()
Definition main.cpp:55