从LeetCode 210. Course Schedule II 了解拓扑排序
生活随笔
收集整理的這篇文章主要介紹了
从LeetCode 210. Course Schedule II 了解拓扑排序
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
問題簡(jiǎn)述
給定n節(jié)課,每節(jié)課按0~n-1編號(hào)。
在修某些課的時(shí)候需要有其它課的基礎(chǔ),必須先上先修課。現(xiàn)在用pair的形式來表示要先修的課,比如 [ [0,1], [1,2] ] 就表示在修課程1之前必須先修課程0,修課程2之前必須修課程1。現(xiàn)在需要給出一個(gè)修課的順序,使得按照該順序修課可以順利得到所有學(xué)分。
現(xiàn)在的輸入為課程數(shù)和先修的順序,輸出為修課順序中的一種。
比如:
又比如:
例子2 輸入: 4, [[1,0],[2,0],[3,1],[3,2]] 輸出: [0,1,2,3] 或者 [0,2,1,3](其中一個(gè)即可)再比如:
例子3 輸入: 2, [[1,0], [0,1]] 輸出: [] 因?yàn)闊o法滿足修課程1之前修課程0,同時(shí)修課程0之前修課程1,所以返回空解決思路
其實(shí)這個(gè)問題就是讓我們?cè)诮o定的輸入下,判斷能否完成拓?fù)渑判颉:螢橥負(fù)渑判?#xff08;詳見這里)?
比如,在輸入為
的情況下,得到的下圖1就是一個(gè)拓?fù)渑判?#xff0c;也就是一個(gè)沒有環(huán)的有向圖。
源代碼
下面是一個(gè)基于BFS的拓?fù)渑判蛩悸?#xff0c;其實(shí)也不能說是嚴(yán)格意義上的BFS,只是有點(diǎn)像~
struct Node{int indegree;vector<int> adjacency;Node(){indegree = 0;adjacency.clear();} };class Solution { private:vector<int> res;public:vector<int> findOrder(int numCourses, vector<pair<int, int>>& prerequisites) {vector<Node*> vec;for (int i = 0; i < numCourses; i++){vec.push_back(new Node());}for (int i = 0; i < prerequisites.size(); i++){vec[prerequisites[i].first]->indegree++;vec[prerequisites[i].second]->adjacency.push_back(prerequisites[i].first);}for (int i = 0; i < vec.size(); i++){int j = 0;for (; j < vec.size(); j++){if (vec[j]->indegree == 0){res.push_back(j);vec[j]->indegree = -1;for (int item : vec[j]->adjacency){vec[item]->indegree--;}break;}}if (j == vec.size()){res.clear();return res;}}return res;} };總結(jié)
以上是生活随笔為你收集整理的从LeetCode 210. Course Schedule II 了解拓扑排序的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: LeetCode 5832. 构造元素不
- 下一篇: LeetCode 1974. 使用特殊打