拓扑排序。能得到拓扑序就是true,不能得到就是false。
vector<int> to[100005]; int in[100005]; int temp; class Solution { public: bool canFinish(int numCourses, vector<vector<int>>& prerequisites) { if (prerequisites.empty()) return true; temp=0; for (int i=0;i<numCourses;i++) to[i].clear(); memset(in,0,sizeof(in)); queue<int> que; int t=prerequisites.size(); for (int i=0;i<t;i++){ to[prerequisites[i][1]].push_back(prerequisites[i][0]); in[prerequisites[i][0]]++; } for (int i=0;i<numCourses;i++) if (!in[i]){ temp++; que.push(i); } while (!que.empty()){ int now=que.front(); que.pop(); for (int i=0;i<to[now].size();i++){ in[to[now][i]]--; if (!in[to[now][i]]){ que.push(to[now][i]); temp++; } } } return temp==numCourses?true:false; } };