1. 程式人生 > 其它 >用bfs 前驅表後繼表實現207. 課程表

用bfs 前驅表後繼表實現207. 課程表

//[[1,0]]表示學1之前要先學0

class Solution {
public:
    bool canFinish(int numCourses, vector<vector<int>>& prerequisites) {
        vector<int> vec(numCourses);//記錄所有頂點的入度,未初始化的為0        // degrees(numCourses)宣告並初始化為numC 個0
        vector<vector<int>> ans(numCourses); //鄰接表
        queue<int
> q;//零入度的頂點 int num = numCourses; for (int i = 0; i < prerequisites.size(); i++) { vec[prerequisites[i][0]]++;//入頂點vec[i] 表示課程i有vec[i]門前驅 ans[prerequisites[i][1]].push_back(prerequisites[i][0]);//出頂點 ans[i]表示課程i 有若干後繼分別是ans[i][0]到ans[i][n] }//ans[0]push進一個1;表示 課程0有1個初度指向課程1
for (int i = 0; i < numCourses; i++) if (vec[i] == 0) {//課程i沒有前驅 q.push(i); //入度為0的先入佇列 num--; } while (!q.empty()) { int temp = q.front(); q.pop();//學習目前沒有前驅的課程 for (int j = 0; j < ans[temp].size(); j++)//
ans[temp].size()表示課程temp有ans[temp].size()個後繼 if (--vec[ans[temp][j]] == 0) {//即課程ans[temp][j] 的前驅是否為0 q.push(ans[temp][j]); num--; } } if (num == 0) return true; return false; } };