-
Notifications
You must be signed in to change notification settings - Fork 12
/
Copy path207. Course Schedule
38 lines (33 loc) · 1.08 KB
/
207. Course Schedule
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
class Solution {
public:
bool hasCycle(vector<int> graph[], int src, vector<bool> &visited, vector<bool> &dfsVisited){
visited[src]=true, dfsVisited[src]=true;
for(int i=0;i<graph[src].size();i++){
int child=graph[src][i];
if(visited[child]==false){
if(hasCycle(graph,child,visited,dfsVisited)) return true;
}else{
if(dfsVisited[child]) return true;
}
}
dfsVisited[src]=false;
return false;
}
bool canFinish(int n, vector<vector<int>>& pre) {
vector<bool> visited(n,false), dfsVisited(n,false);
vector<int> graph[n];
for(int i=0;i<pre.size();i++){
int u=pre[i][0], v=pre[i][1];
graph[v].push_back(u);
}
for(int i=0;i<n;i++){
if(visited[i]==false){
if(hasCycle(graph,i,visited,dfsVisited)) return false;
}
}
for(int i=0;i<n;i++){
if(visited[i]==false) return false;
}
return true;
}
};