标签:-- 难度 http color return ++ i++ problem int
problem:https://leetcode.com/contest/biweekly-contest-5/problems/parallel-courses/
这道题是leetcode双周赛的一道hard题,实际上难度并没有那么高。题目是给定课程的预修关系,比如要学习课程B,必须先学过课程A,输出学完所有课程的最短学期数。
拓扑排序的基本思想:
(1) 对于有向图,记录所有顶点的入度(指向该顶点的边的个数)
(2) 找到所有入度为0的顶点,把顶点放入队列
(3) 从队列pop出一个元素,该顶点则是当前满足条件的顶点,可将计数加一,并把它指向的顶点的入度都减一,重复(2)(3)直到队列为空
如果已经找不到入度为0的顶点,而当前计数还没有覆盖到所有顶点,那么说明有向图中可能出现了环路。
class Solution { public: vector<unordered_set<int>> g; int minimumSemesters(int N, vector<vector<int>>& r) { vector<int> indegree(N + 1, 0); g.resize(N + 1); for(int i = 0;i < r.size();i++) { g[r[i][0]].insert(r[i][1]); indegree[r[i][1]]++; } queue<int> q; for(int i = 1;i <= N;i++) { if(indegree[i] == 0) { q.push(i); } } int res = 0; int count = 0; while(!q.empty()) { int size = q.size(); for(int i = 0;i < size;i++) { int cur = q.front(); q.pop(); count++; for(auto& next : g[cur]) { indegree[next]--; if(indegree[next] == 0) { q.push(next); } } } res++; } if(count != N) return -1; return res; } };
[拓扑排序] leetcode 1136 Parallel Courses
标签:-- 难度 http color return ++ i++ problem int
原文地址:https://www.cnblogs.com/fish1996/p/11260936.html