207. Course Schedule
https://leetcode.com/problems/course-schedule/description/
DFS, detect cycle. For each node, we have 3 states during DFS: 1) un-visited, 2) visiting, 3) visited.
class Solution { public: bool canFinish(int n, vector<pair<int, int>>& p) { vector<int> visited(n, -1); // un-visited vector<set<int>> v(n, set<int>()); for (int i = 0; i < p.size(); i++) { v[p[i].second].insert(p[i].first); } for (int i = 0; i < n; i++) if (visited[i] == -1 && dfs(v, visited, i)) return false; return true; } bool dfs(vector<set<int>>& v, vector<int>& visited, int n) { visited[n] = 1; // visiting for (auto nb : v[n]) { if (visited[nb] == 1) return true; else if (visited[nb] == 2) continue; else { if (dfs(v, visited, nb)) return true; } } visited[n] = 2; // visited return false; } };
Topological Sort is another way.
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步