leetcode-華為專題-207. 課程表
阿新 • • 發佈:2021-08-19
class Solution { public: bool canFinish(int numCourses, vector<vector<int>>& prerequisites) { if(numCourses==0) return false; vector<vector<int>> edge(numCourses); // 儲存邊的連線資訊 vector<int> index(numCourses); // 儲存入度資訊 for(int i = 0; i < prerequisites.size(); i++){ // 儲存修完課程a, 可以修的其餘所有課程 edge[prerequisites[i][1]].push_back(prerequisites[i][0]); index[prerequisites[i][0]]++; // 入度加一 } queue<int> q; for(int i = 0; i < numCourses; i++){ if(index[i]==0) q.push(i); // 將入度為0的節點加入佇列 } int res = 0; while(!q.empty()){ vector<int> tmp; res++; tmp = edge[q.front()]; q.pop(); for(int i = 0; i < tmp.size(); i++){ index[tmp[i]]--; // 將與剛才彈出節點相連的節點入度全部減1if(index[tmp[i]]==0) q.push(tmp[i]); } } if(res==numCourses) return true; else return false; } };