一、题目
二、代码
class Solution
{
public:
//拓扑排序 通过入度求解
bool canFinish(int numCourses, vector<vector<int>>& prerequisites)
{
int i,j;
vector<int> in_degree(numCourses,0);
unordered_map <int,vector<int>> re_map;
queue<int> re_queue;
int count=0;
//先统计各个元素的入度
for(i=0;i<prerequisites.size();i++)
{
int num=0;
num=prerequisites[i][0];
in_degree[num]++;
re_map[prerequisites[i][1]].push_back(num);
}
//入度为0弹出
for(i=0;i<numCourses;i++)
{
if(in_degree[i]==0)
{
re_queue.push(i);
count++;
}
}
//不断更新
while(!re_queue.empty())
{
int num=re_queue.front();
re_queue.pop();
for(i=0;i<re_map[num].size();i++)
{
in_degree[re_map[num][i]]--;
if(in_degree[re_map[num][i]]==0)
{
re_queue.push(re_map[num][i]);
count++;
}
}
}
if(count==numCourses) return 1;
return 0;
}
};