-
Notifications
You must be signed in to change notification settings - Fork 5
/
Copy path207
46 lines (40 loc) · 1.29 KB
/
207
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
class Solution {
public:
bool checkcycle(int node,unordered_map<int,bool> &visit,unordered_map<int,bool> &dfsvisit,unordered_map<int,set<int>> &adj){
visit[node]=true;
dfsvisit[node]=true; // mark both as true
for(auto i:adj[node]){
if(visit[i]==0){ // not visited node
bool cycle_det=checkcycle(i,visit,dfsvisit,adj);
if(cycle_det)
return true;
}
else if(dfsvisit[i]==1) // visit =1 & dfsvisit =1
return true;
}
dfsvisit[node]=false;
return false; // wapis jate wakt 0 kr do dfsvisit ko
}
bool canFinish(int numCourses, vector<vector<int>>& prerequisites) {
// return true;
unordered_map<int,set<int>>adj;
for(auto i:prerequisites){
vector<int>j=i;
int a=j[0];
int b=j[1];
adj[a].insert(b);
// cout<<a<<" "<<b<<endl;
}
// call dfs for all components
unordered_map<int,bool> visit;
unordered_map<int,bool> dfsvisit;
for(int i=0;i<numCourses;i++){
if(!visit[i]){
bool cycle_found=checkcycle(i,visit,dfsvisit,adj);
if(cycle_found)
return false;
}
}
return true;
}
};