leetcode-207. 課程表
阿新 • • 發佈:2021-07-22
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; } };