🔗 leetcode.cn/problems/co…
题目
- 有 n 门课程,有若干课程的依赖,[a, b] 表示,b 是 a 的先修课,需要先修 b,才能修 a
- 判断是否可以完成 n 门课程的学习
思路
- 先把课程依赖转化成邻接表
- dfs 判断每个课程是否有循环依赖
代码
class Solution {
public:
vector<vector<int>> adj
vector<bool> visited, finished
bool check(int index) {
if (visited[index] == true) return finished[index]
visited[index] = true
bool ans = true
for (int i = 0
if (check(adj[index][i]) == false) {
ans = false
break
}
}
finished[index] = ans
return ans
}
bool canFinish(int numCourses, vector<vector<int>>& prerequisites) {
adj.resize(numCourses)
visited.resize(numCourses)
finished.resize(numCourses)
for (int i = 0
int a = prerequisites[i][0]
int b = prerequisites[i][1]
adj[a].push_back(b)
}
for (int i = 0
if (check(i) == false) return false
}
return true
}
}