207. Course Schedule
来源:互联网 发布:美国生活水平知乎 编辑:程序博客网 时间:2024/06/05 17:20
问题描述:
题目描述了课程学习的优先级,如果出现不可能的学习情况,则表示该schedule是不可能的。
问题分析:
该问题可以转换成有向无环图的问题,若该图中存在了有向无环图,例如 存在a->b,和b->a的边,很显然,这是不可能成为schedule的,因为如果先修a再修b,那么就不能存在先修b再修a,根据《算法概论》3.3.2这一节中,如果存在回边,那么这个有向图就是有环的,那么思路很明显了,可以先进行DFS,记录下各个顶点的post值,如果存在回边(u,v)。即post(u)<post(v)的情况,那么证明存在回边。
但是如下的方法,在Leetcode测试样本中,有个2000的节点,测试显示内存超出,由于邻接矩阵占用的内存较大,所以希望通过邻接表的形式降低内存的消耗,希望能A掉,该方法会在下一次的博客中进行展示,to be continued,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
程序如下:
class Solution {public: bool *visited; int **edges; int *pre; int *post; int index=0; bool canFinish(int numCourses, vector<pair<int, int>>& prerequisites) { int *vertex=new int[numCourses];post=new int[numCourses];pre=new int[numCourses];for (int i=0;i<numCourses;i++){ vertex[i]=i; post[i]=0; pre[i]=0;}edges=new int*[numCourses];for(int i=0;i<numCourses;i++){edges[i]=new int[numCourses]; } for(int i=0;i<numCourses;i++){for(int j=0;j<numCourses;j++){edges[i][j]=0;}}for(int i=0;i<prerequisites.size();i++){int a0=prerequisites[i].first;int a1=prerequisites[i].second;edges[a0][a1]=1;}DFSTraverse(numCourses);bool isSchedual=test(prerequisites);return isSchedual; }void DFSTraverse(int numCourses){ visited=new bool[numCourses];for (int i=0;i<numCourses;i++){ visited[i]=false;}for (int i=0;i<numCourses;i++){if(!visited[i]){ DFSFunction(numCourses,i); }} } void DFSFunction(int numCourses,int i){ visited[i]=true; pre[i]=index++; for(int j=0;j<numCourses;j++){ if(edges[i][j]!=0&&!visited[j]){ DFSFunction(numCourses,j); } } post[i]=index++; } bool test(vector<pair<int, int>>& prerequisites){ for(int i=0;i<prerequisites.size();i++){int a0=prerequisites[i].first;int a1=prerequisites[i].second;if(post[a0]<post[a1]){return false;}} return true; }};
阅读全文
0 0
- [leetcode] 207.Course Schedule
- 207.Course Schedule
- Leetcode 207. Course Schedule
- 207. Course Schedule
- 207. Course Schedule LeetCode
- 207. Course Schedule
- leetcode 207. Course Schedule
- 207. Course Schedule
- leetcode.207. Course Schedule
- LeetCode 207. Course Schedule
- 【LeetCode】207. Course Schedule
- 207. Course Schedule
- 207. Course Schedule
- 207. Course Schedule
- [leetcode] 207. Course Schedule
- leetcode-207. Course Schedule
- 207. Course Schedule
- 207. Course Schedule
- MySQL索引类型 btree索引和hash索引的区别
- Java学习——Servlet 本质是什么 servlet运行原理
- mint-ui swipe组件源码解析
- 网络iso七层协议含义
- Android 实现两次点击返回键 提示退出
- 207. Course Schedule
- Vue SPA + Nodejs项目实战
- bugku Reverse Easy_vb wirteup
- hibernate查询结果映射到实体和map的方法
- 原型模式(Prototype)(创建型模式)
- Jquery.flotX轴日期对应不上
- gitclone 报错端口链接不上
- 字符串常用方法
- 初识C++