1. 程式人生 > 其它 >leetcode-207. 課程表

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; } };