题目描述
思路:
用_in来记录每个课程的入度;
循环:若有入度为0的课程,则找到该课程,将该课程的后继课程入度减1;并将该课程的入度变为-1,表示该课程已学过;
若循环结束后,所有课程的入度都为-1,则表示全部课程都学完,返回true;
否则,返回false。
代码如下:
public class Solution {
public bool CanFinish(int numCourses, int[][] prerequisites) {
int[] _in = new int[numCourses];
for (int i = 0; i < prerequisites.GetLength(0); i++)
{
_in[prerequisites[i][0]]++;
}
while (_in.Contains(0))
{
for (int i = 0; i < numCourses; i++)
{
if (_in[i] == 0)
{
_in[i]--;
for (int j = 0; j < prerequisites.GetLength(0); j++)
{
if (prerequisites[j][1] == i)
{
_in[prerequisites[j][0]]--;
}
}
}
}
}
if (_in.Sum() == -1 * numCourses)
{
return true;
}
else
{
return false;
}
}
}