1. 程式人生 > 其它 >leetcode-華為專題-207. 課程表

leetcode-華為專題-207. 課程表

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]]--; // 將與剛才彈出節點相連的節點入度全部減1
if(index[tmp[i]]==0) q.push(tmp[i]); } } if(res==numCourses) return true; else return false; } };