207. Course Schedule
2016-06-25 21:34
357 查看
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.
就是给一个有向图,检测是否存在环。
boolean hascycle=false;
boolean[] onstack,used;
public boolean canFinish(int numCourses, int[][] prerequisites)
{
if(numCourses<1)
return true;
int m=prerequisites.length;
if(m<1)
return true;
ArrayList<Integer>[] adjlist=new ArrayList[numCourses];
for(int i=0;i<numCourses;i++)
adjlist[i]=new ArrayList<>();
for(int i=0;i<m;i++)
adjlist[prerequisites[i][1]].add(prerequisites[i][0]);
onstack=new boolean[numCourses];
used=new boolean[numCourses];
for(int i=0;i<numCourses;i++)
if(!used[i])
dfs(i,adjlist);
return !hascycle;
}
private void dfs(int i,ArrayList<Integer>[] adjlist)
{
used[i]=true;
onstack[i]=true;
for(int a : adjlist[i])
if(hascycle)
return ;
else if(!used[a])
dfs(a, adjlist);
else if(onstack[a])
{
hascycle=true;
return ;
}
onstack[i]=false;
}
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.
就是给一个有向图,检测是否存在环。
boolean hascycle=false;
boolean[] onstack,used;
public boolean canFinish(int numCourses, int[][] prerequisites)
{
if(numCourses<1)
return true;
int m=prerequisites.length;
if(m<1)
return true;
ArrayList<Integer>[] adjlist=new ArrayList[numCourses];
for(int i=0;i<numCourses;i++)
adjlist[i]=new ArrayList<>();
for(int i=0;i<m;i++)
adjlist[prerequisites[i][1]].add(prerequisites[i][0]);
onstack=new boolean[numCourses];
used=new boolean[numCourses];
for(int i=0;i<numCourses;i++)
if(!used[i])
dfs(i,adjlist);
return !hascycle;
}
private void dfs(int i,ArrayList<Integer>[] adjlist)
{
used[i]=true;
onstack[i]=true;
for(int a : adjlist[i])
if(hascycle)
return ;
else if(!used[a])
dfs(a, adjlist);
else if(onstack[a])
{
hascycle=true;
return ;
}
onstack[i]=false;
}
相关文章推荐
- 向文件中写数据
- yuv二值化操作
- skynet框架 使用心得
- 使用maven命令搭建多模块企业级项目
- 将数组排序,数组中所有的负整数出现在正整数前面(时间复杂度为 O(n), 空间复杂度为 O(1)).
- 206. Reverse Linked List
- 第130课: Spark Streaming源码经典解读系列之五:Receiver工作内幕源码解密
- CentOS安装scp命令的软件包openssh-clients
- 第一次打字比赛后的感想
- 关于引用
- java连接sqlserver2008各种坑的解决参考方法
- 删除百度云右键菜单
- python中HTMLParser简单理解
- java 容器的选择
- 观察者模式(Observer)
- SQL优化
- Spring框架的validator验证器的实现
- java基础(四)二维数组/
- Visual Studio配色方案
- Redmine插件