题目分析:
要想返回true,就是要判断课程之间的关系图是否有环。如果有环就要返回false,如果没有则返回true。
在这里我使用入度表进行解决。具体操作步骤在注释里。
代码如下:
class Solution {
public:
bool canFinish(int numCourses, vector<vector<int>>& prerequisites) {
int n=numCourses;
vector<int>degrees(n);//长度为n,初始值为0的课程记录表
vector<vector<int>>a(n);//邻接表
queue<int>zero;//初始值均为零的队列,用于存储入度为0的顶点
//进行变量的更新
for(int i=0;i<prerequisites.size();i++)
{
degrees[prerequisites[i][0]]++;//用1表示入度非零的顶点
a[prerequisites[i][1]].push_back(prerequisites[i][0]);//表示出入顶点的顺序,把一个课程和他的所有前级课程联系到一起
}
//将入度为0的顶点存储在队列里
for(int i=0;i<numCourses;i++)
{
if(degrees[i]==0)
{
zero.push(i);
n--;