图算法,判断有向图是否存在回路。拓扑排序即可,代码如下:
bool canFinish(int numCourses, vector<vector<int>>& prerequisites) {
vector<int> into(numCourses, 0);
for(int i = 0; i < prerequisites.size(); ++i)
into[prerequisites[i][0]]++;
for(int i = 0; i < numCourses; ++i){
int j = 0;
while(j < numCourses){
if(into[j] == 0)
break;
++j;
}
if(j == numCourses)
return false;
into[j] = -1;
for(int p = 0; p < prerequisites.size(); ++p)
if(prerequisites[p][1] == j)
into[prerequisites[p][0]]--;
}
return true;
}