Course Schedule
Problem
There are a total of numCourses
courses you have to take, labeled from 0
to numCourses - 1
. You are given an array prerequisites
where prerequisites[i] = [ai, bi]
indicates that you must take course bi
first if you want to take course ai
.
- For example, the pair
[0, 1]
, indicates that to take course0
you have to first take course1
.
Return true
if you can finish all courses. Otherwise, return false
.
Solution Approach
Expected Time complexity:
Click - to see solution code
- C++
class Solution {
public:
int check = 1;
vector<int> vis, st;
unordered_map<int, vector<int>> edges;
void dfs(int cur) {
if (vis[cur] || check == 0) {
check = 0;
return;
}
vis[cur] = 1;
st[cur] = 1;
for (auto nbr : edges[cur]) {
if (!vis[nbr])
dfs(nbr);
else if (st[nbr])
check = 0;
}
st[cur] = 0;
}
bool canFinish(int numCourses, vector<vector<int>>& pre) {
vis.resize(numCourses);
st.resize(numCourses);
for (int i = 0; i < pre.size(); i++) {
int x = pre[i][0];
int y = pre[i][1];
edges[x].push_back(y);
// edges[y].push_back(x);
}
for (int i = 0; i < numCourses; i++) {
if (!vis[i]) {
dfs(i);
}
}
return check;
}
};