leetcode-207. 课程表
class Solution { public: bool canFinish(int numCourses, vector<vector<int>>& prerequisites) { vector<vector<int>> edge; vector<int> index; edge.resize(numCourses); // resize()操作:创建指定数量的的元素并指定vector的存储空间 index.resize(numCourses); for(int i = 0; i < prerequisites.size(); i++){ edge[prerequisites[i][1]].push_back(prerequisites[i][0]); // [0,1] 构成边1->0 代表修完课程1才能修课程0 index[prerequisites[i][0]]++; // 课程0的入度加1 } queue<int> q; for(int i = 0; i < numCourses; i++){ // 如果课程的入度为0,则加入队列 if(index[i]==0) q.push(i); } int res = 0; while(!q.empty()){ res++; int tmp = q.front(); // 获得队头元素 q.pop(); // 弹出队头元素 vector<int> vec; vec = edge[tmp]; // 获得队头元素连接的其余所有顶点 for(int i = 0; i < vec.size(); i++){ index[vec[i]]--; // 其余顶点的入度剪1 if(index[vec[i]]==0) q.push(vec[i]); // 如果其余顶点的入度为0,则加入队列 } } if(res==numCourses) // 如果出队的元素个数等于课程个数,则返回true return true; else return false; } };