leetcode 課程表,leetcode Course Schedule II

 2023-12-06 阅读 36 评论 0

摘要:題目連接 https://leetcode.com/problems/course-schedule-ii/?? Course Schedule II Description There are a total of n courses you have to take, labeled from 0 to n - 1. leetcode 課程表?Some courses may have prerequisites, for example to take course 0 you ha

題目連接

https://leetcode.com/problems/course-schedule-ii/??

Course Schedule II

Description

There are a total of n courses you have to take, labeled from 0 to n - 1.

leetcode 課程表?Some courses may have prerequisites, for example to take course 0 you have to first take course 1, which is expressed as a pair: [0,1]

Given the total number of courses and a list of prerequisite pairs, return the ordering of courses you should take to finish all courses.

There may be multiple correct orders, you just need to return one of them. If it is impossible to finish all courses, return an empty array.

LEETCODE、For example:

2, $[[1,0]]$
There are a total of 2 courses to take. To take course 1 you should have finished course 0. So the correct course order is $[0,1]$

4, $[[1,0],[2,0],[3,1],[3,2]]$
There are a total of 4 courses to take. To take course 3 you should have finished both courses 1 and 2. Both courses 1 and 2 should be taken after you finished course 0. So one correct course order is $[0,1,2,3]$. Another correct ordering is$[0,2,1,3].$

LeetCode Online Judge。拓撲排序,輸出結果
Ps:我喜歡用鏈式前向星建圖。

class Solution {
public:vector<int> findOrder(int numCourses, vector<pair<int, int>>& prerequisites) {ans.clear();int m = prerequisites.size();inq = new int[numCourses + 10];memset(inq, 0, sizeof(int)* (numCourses + 10));head = new int[numCourses + 10];memset(head, -1, sizeof(int)* (numCourses + 10));G = new edge[m + 10];for (int i = 0; i < m; i++) {int u = prerequisites[i].first, v = prerequisites[i].second;inq[u]++;add_edge(v, u);}queue<int> q;for (int i = 0; i < numCourses; i++) { if (!inq[i])  q.push(i); }while (!q.empty()) {int u = q.front(); q.pop();ans.push_back(u);for (int i = head[u]; ~i; i = G[i].next) {if (--inq[G[i].to] == 0) q.push(G[i].to);}}delete[]G; delete[]inq, delete[]head;return ans.size() == numCourses ? ans : vector<int>();}
private:vector<int> ans;int tot, *inq, *head;struct edge { int to, next; }*G;inline void add_edge(int u, int v) {G[tot].to = v, G[tot].next = head[u], head[u] = tot++;}
};

轉載于:https://www.cnblogs.com/GadyPu/p/5020731.html

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/3/192311.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息