[leetcode] 207. Course Schedule 解题报告
2016-02-26 14:10
253 查看
题目链接:https://leetcode.com/problems/course-schedule/
There are a total of n courses you have to take, labeled from
Some courses may have prerequisites, for example to take course 0 you have to first take course 1, which is expressed as a pair:
Given the total number of courses and a list of prerequisite pairs, is it possible for you to finish all courses?
For example:
There are a total of 2 courses to take. To take course 1 you should have finished course 0. So it is possible.
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.
click to show more hints.
Hints:
This problem is equivalent to finding if a cycle exists in a directed graph. If a cycle exists, no topological ordering exists and therefore it will be impossible to take all courses.
Topological Sort via DFS - A great video tutorial (21 minutes) on Coursera explaining
the basic concepts of Topological Sort.
Topological sort could also be done via BFS.
思路:拓扑排序的应用.拓扑顺序就像是在一个工程中每个小项目完成有向后顺序一样,而我们的任务就是找出这个完成的先后顺利的序列.
其方法就是每次将一个入度为0的结点删除,并且将其指向的结点入度减一.
代码如下:
参考:忘记了,sorry!
There are a total of n courses you have to take, labeled from
0to
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.
click to show more hints.
Hints:
This problem is equivalent to finding if a cycle exists in a directed graph. If a cycle exists, no topological ordering exists and therefore it will be impossible to take all courses.
Topological Sort via DFS - A great video tutorial (21 minutes) on Coursera explaining
the basic concepts of Topological Sort.
Topological sort could also be done via BFS.
思路:拓扑排序的应用.拓扑顺序就像是在一个工程中每个小项目完成有向后顺序一样,而我们的任务就是找出这个完成的先后顺利的序列.
其方法就是每次将一个入度为0的结点删除,并且将其指向的结点入度减一.
代码如下:
class Solution { public: bool canFinish(int numCourses, vector<pair<int, int>>& prerequisites) { vector<unordered_set<int>> graph(numCourses, unordered_set<int>());// vector<int> inDegree(numCourses, 0);//维护一个当前课程有多少先修课的数组 for(auto val:prerequisites) { if(graph[val.second].count(val.first) == 0)//如果当前先修课还没有被计算 { graph[val.second].insert(val.first);//则将此课加入到先修课结点维护的集合中,代表此先修课完成之后才可以学的课 inDegree[val.first]++;//此课程的入度+1,代表有多少先修课 } } int i, j; for(i = 0; i< numCourses; i++) { for(j = 0; j < numCourses; j++)//寻找入度为0的结点,找到就break循环 if(inDegree[j] == 0) break; if(j == numCourses) return false;//如果最终没有找到,说明有环 inDegree[j]--;//将这个入度为0的结点删去 for(auto val: graph[j]) //将入度为0的结点指向的结点入度都-1 inDegree[val]--; } return true; } };
参考:忘记了,sorry!
相关文章推荐
- 五、UiSelector API 详细介绍
- ios - 图片处理
- Android:实现仿 美团/淘宝 多级分类菜单效果
- 20145327寒假第四周学习总结
- linux设备驱动归纳总结(八):4.总线热插拔
- Maven 知识收藏
- 用PHP操作http中Etag、lastModified和Expires标签
- Java语言的基础组成
- SAS Timezone
- Android support library 23.2新特性介绍
- CentOS 6.4安装配置LNMP服务器(Nginx+PHP+MySQL)
- matlab的神经网络工具箱
- UVA 10003(p278)----CUtting Sticks
- arm-2009q1-203-arm-none-linux-gnueabi.bin安装方法
- 知识点滴记录:onCreate()过程中获取View的width和Height为0
- Leet Code OJ 258. Add Digits [Difficulty: Easy]
- 如何选择前端框架
- 时间冲突常见解决方案
- 特性003
- strcpy拷贝越界问题