leetcode Course Schedule
题目连接
https://leetcode.com/problems/course-schedule/
Course Schedule
Description
There are a total of n courses you have to take, labeled from 0 to n−1.
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, is it possible for you to finish all courses?
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 it is possible.
2, [[1,0],[0,1]]
There are a total of 2 courses to take. To take course 1 you should have finished course 0, and to take course 0 you should also have finished course 1. So it is impossible.
Note:
The input prerequisites is a graph represented by a list of edges, not adjacency matrices. Read more about how a graph is represented.
拓扑排序。。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | class Solution { public : bool canFinish( int numCourses, vector<pair< int , int >>& prerequisites) { if (numCourses && prerequisites.empty()) return true ; tot = 0; int num = 0, 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[v]++; add_edge(u, v); } queue< int > q; for ( int i = 0; i < numCourses; i++) { if (!inq[i]) q.push(i); } while (!q.empty()) { num++; int u = q.front(); q.pop(); 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 num == numCourses; } private : 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++; } }; |
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET 9 new features-C#13新的锁类型和语义
· Linux系统下SQL Server数据库镜像配置全流程详解
· 现代计算机视觉入门之:什么是视频
· 你所不知道的 C/C++ 宏知识
· 聊一聊 操作系统蓝屏 c0000102 的故障分析
· 不到万不得已,千万不要去外包
· C# WebAPI 插件热插拔(持续更新中)
· 会议真的有必要吗?我们产品开发9年了,但从来没开过会
· 如何打造一个高并发系统?
· 《SpringBoot》EasyExcel实现百万数据的导入导出