课程表

class Solution {
public:
bool canFinish(int numCourses, vector<vector<int>>& prerequisites) {
//图的深度或者宽度遍历算法,使用拓扑排序也是可行的而且相对来说简单一点
//建立映射机制进行相应的,直接拓扑排序吧
vector<int> rudu(numCourses, 0);
map<int, vector<int>> yingshe;
int col = prerequisites.size();
if(col==0)
return true;
int row = prerequisites[0].size();
deque<int> Q;
//初始化
for (int i = 0; i < numCourses; ++i)
{
yingshe[i] = vector<int>();
}
for (int i = 0; i<col; ++i)//d
{
auto course1 = prerequisites[i];
int qian = course1[0];
int hou = course1[1];
yingshe[hou].push_back(qian);
++rudu[qian];
}
for (int i = 0; i<numCourses; ++i)
{
if (rudu[i] == 0)
Q.push_back(i);
}
if (Q.empty())
return false;
int count = 0;
while (!Q.empty())
{
int temp = Q.front();
Q.pop_front();
++count;
int size = yingshe[temp].size();
auto ys = yingshe[temp];
for (int i=0; i < size; ++i)
{
int t = ys[i];
--rudu[t];
if (rudu[t] == 0)
Q.push_back(t);
}
}
if (count == numCourses)
return true;
else
return false;
}
};
