course-schedule 1.0.0
Course Schedule
Loading...
Searching...
No Matches
Solution Class Reference

Public Member Functions

bool canFinish (int numCourses, vector< vector< int > > &prerequisites)
 

Detailed Description

Definition at line 5 of file main.cpp.

Member Function Documentation

◆ canFinish()

bool Solution::canFinish ( int  numCourses,
vector< vector< int > > &  prerequisites 
)
inline

Definition at line 8 of file main.cpp.

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 }

The documentation for this class was generated from the following file: