思路:拓補排序
數據結構中的知識,這道題其實本質上就是判斷在課程表的這個有向圖當中是否有環存在,如果有環,說明不能學完;沒有環說明可以。判斷有無環的做法是拓補排序最好解決。
下面就是拓補排序的做法了,其實就是模板而已,借鑒一下就可以了。
class Solution {
public:bool canFinish(int numCourses, vector<vector<int>>& prerequisites) {vector<vector<int>>s(numCourses);vector<int>counts(numCourses,0);//記錄入度for(int i=0;i<prerequisites.size();i++){s[prerequisites[i][1]].push_back(prerequisites[i][0]);counts[prerequisites[i][0]]++;}queue<int>q;for(int i=0;i<numCourses;i++){if(counts[i]==0){q.push(i);}}int cnt=0;while(!q.empty()){int tmp=q.front();q.pop();++cnt;for(int i:s[tmp]){if(--counts[i]==0){q.push(i);}}}return cnt==numCourses;}
};