-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathcourse-schedule-ii.cpp
57 lines (45 loc) · 1.25 KB
/
course-schedule-ii.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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
//Runtime: 16 ms
class Solution {
public:
int f = 1;
void TopSort(int src, int visited[],int greyset[], stack<int> &S, vector<int>adj[])
{
visited[src] = 1;
greyset[src]= 1;
for(auto it:adj[src])
{
if(!visited[it])
TopSort(it, visited, greyset, S, adj);
else
{
if(greyset[it])
f = 0;
}
}
greyset[src] = 0;
S.push(src);
}
vector<int> findOrder(int numCourses, vector<pair<int, int>>& prerequisites) {
vector<int>adj[numCourses];
vector<pair<int,int> > ::iterator it;
for(it=prerequisites.begin();it!=prerequisites.end();it++)
adj[it->second].push_back(it->first);
stack<int>S;
int visited[numCourses];
memset(visited, 0, sizeof(visited));
int greyset[numCourses];
memset(greyset, 0, sizeof(greyset));
for(int i=0;i<numCourses;i++)
if(!visited[i])
TopSort(i, visited, greyset, S, adj);
vector<int> res;
if(!f)
return res;
while(!S.empty())
{
res.push_back(S.top());
S.pop();
}
return res;
}
};