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 47 48 49 50 51 52 53
| #include <iostream> #include <vector>
using namespace std;
class Solution { vector<vector<int>> graph; vector<int> visited; bool hasCycle = true;
void backtracking(int idx) { visited[idx] = 1; for (int node : graph[idx]) { if (visited[node] == 1) { hasCycle = false; return; } else if (visited[node] == 0) { backtracking(node); } } visited[idx] = 2; }
public: bool canFinish(int numCourses, vector<vector<int>>& prerequisites) { graph.resize(numCourses); visited.resize(numCourses); for (auto& edge : prerequisites) { graph[edge[1]].emplace_back(edge[0]); } for (int i = 0; i < numCourses; i++) { if (!visited[i]) { backtracking(i); } } return hasCycle; } };
int main(int argc, const char** argv) { Solution so; vector<vector<int>> test = { { 1, 0 }, { 0, 1 } }; bool res = so.canFinish(2, test); return 0; }
|