當(dāng)前位置:
首頁(yè) >
LeetCode 210. 课程表 II(拓扑排序)
發(fā)布時(shí)間:2024/7/5
36
豆豆
生活随笔
收集整理的這篇文章主要介紹了
LeetCode 210. 课程表 II(拓扑排序)
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
1. 題目
現(xiàn)在你總共有 n 門課需要選,記為 0 到 n-1。
在選修某些課程之前需要一些先修課程。
例如,想要學(xué)習(xí)課程 0 ,你需要先完成課程 1 ,我們用一個(gè)匹配來(lái)表示他們: [0,1]
給定課程總量以及它們的先決條件,返回你為了學(xué)完所有課程所安排的學(xué)習(xí)順序。
可能會(huì)有多個(gè)正確的順序,你只要返回一種就可以了。
如果不可能完成所有課程,返回一個(gè)空數(shù)組。
來(lái)源:力扣(LeetCode) 鏈接:https://leetcode-cn.com/problems/course-schedule-ii
著作權(quán)歸領(lǐng)扣網(wǎng)絡(luò)所有。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系官方授權(quán),非商業(yè)轉(zhuǎn)載請(qǐng)注明出處。
2. 解題
參考:圖Graph–拓?fù)渑判?#xff08;Topological Sorting)
類似題目: LeetCode 207. 課程表(拓?fù)渑判?#xff09;
本題跟 207 題完全一致,只是增加了路徑輸出。不做過(guò)多解釋,見(jiàn)207題解答
- DFS的區(qū)別是,本題,必須從入度為0的節(jié)點(diǎn)開(kāi)始
2.1 廣度優(yōu)先
class Solution { public:vector<int> findOrder(int numCourses, vector<vector<int>>& prerequisites) {unordered_map<int, unordered_set<int>> m;vector<int> indegree(numCourses, 0);for(auto& pre : prerequisites){m[pre[1]].insert(pre[0]);indegree[pre[0]]++;}queue<int> q;int tp, finish = 0, i;for(i = 0; i < numCourses; ++i)if(indegree[i] == 0)q.push(i);vector<int> ans(numCourses);i = 0;while(!q.empty()){tp = q.front();finish++;ans[i++] = tp;q.pop();for(auto id : m[tp]){if(--indegree[id] == 0)q.push(id);}}if(i != numCourses)return {};return ans;} };48 ms 14.3 MB
2.2 深度優(yōu)先
- 需要從入度為0的開(kāi)始,以便輸出順序
- 結(jié)束了要檢查路徑個(gè)數(shù)夠不夠
44 ms 14.7 MB
總結(jié)
以上是生活随笔為你收集整理的LeetCode 210. 课程表 II(拓扑排序)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: LeetCode 288. 单词的唯一缩
- 下一篇: LeetCode 345. 反转字符串中