207. 课程表/210. 课程表 II
生活随笔
收集整理的這篇文章主要介紹了
207. 课程表/210. 课程表 II
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
2020-06-05
1.題目描述
課程表2.題解
拓撲排序,首先我們需要一個入度矩陣和鄰接表來存放相關的信息,將入度為0的點存入隊列/棧,并且將 與其相連的點的入度減1,重復上述操作,如果此時學習完的課程數等于numCourses則返回true。207
class Solution { public:bool canFinish(int numCourses, vector<vector<int>>& prerequisites) {vector<int> degree(numCourses,0); // 存放入度矩陣vector<vector<int>> adjacent(numCourses); // 鄰接表// 初始化for (int i=0;i<prerequisites.size();i++){adjacent[prerequisites[i][1]].push_back(prerequisites[i][0]);degree[prerequisites[i][0]]++;}queue<int> myque;int cnt=0;for (int i=0;i<numCourses;i++){if (degree[i]==0){ // 入度為0cnt++;myque.push(i);}}while (!myque.empty()){int tmp=myque.front();myque.pop();for (int i=0;i<adjacent[tmp].size();i++){degree[adjacent[tmp][i]]--;if (degree[adjacent[tmp][i]]==0){cnt++;myque.push(adjacent[tmp][i]);}}}if (cnt==numCourses) return true;return false;} };210
class Solution { public:vector<int> findOrder(int numCourses, vector<vector<int>>& prerequisites) {vector<int> degree(numCourses,0); // 存放入度矩陣vector<vector<int>> adjacent(numCourses); // 鄰接表// 初始化for (int i=0;i<prerequisites.size();i++){adjacent[prerequisites[i][1]].push_back(prerequisites[i][0]);degree[prerequisites[i][0]]++;}vector<int> res;queue<int> myque;int cnt=0;for (int i=0;i<numCourses;i++){if (degree[i]==0){ // 入度為0cnt++;myque.push(i);res.push_back(i);}}while (!myque.empty()){int tmp=myque.front();myque.pop();for (int i=0;i<adjacent[tmp].size();i++){degree[adjacent[tmp][i]]--;if (degree[adjacent[tmp][i]]==0){cnt++;myque.push(adjacent[tmp][i]);res.push_back(adjacent[tmp][i]);}}}if (cnt!=numCourses) res.clear();return res;} };總結
以上是生活随笔為你收集整理的207. 课程表/210. 课程表 II的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JSPServlet学习笔记----第4
- 下一篇: JavaScript权威指南--客户端存