Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public boolean canFinish(int numCourses, int[][] prerequisites) {
- if(numCourses<=0)
- return false;
- //use hashmap to store adjList
- HashMap<Integer, ArrayList<Integer>> map=new HashMap<Integer, ArrayList<Integer>>();
- for(int i=0;i<prerequisites.length;i++){
- if(map.containsKey(prerequisites[i][1])){
- ArrayList<Integer> list=map.get(prerequisites[i][1]);
- list.add(prerequisites[i][0]);
- map.put(prerequisites[i][1], list);
- }
- else{
- ArrayList<Integer> list = new ArrayList<Integer>();
- list.add(prerequisites[i][0]);
- map.put(prerequisites[i][1],list);
- }
- }
- int[] visit=new int[numCourses];
- for(int i=0;i<numCourses;i++){
- if(!dfshelper(map,visit,i))
- return false;
- }
- return true;
- }
- public boolean dfshelper(HashMap<Integer, ArrayList<Integer>> map, int[] visit, int vertex){
- visit[vertex]=1; //visiting
- if(map.containsKey(vertex)){
- for(int u: map.get(vertex)){
- if(visit[u]==1)
- return false;//have cycle
- if(visit[u]==0 && !dfshelper(map,visit,u))
- return false;
- }
- }
- visit[vertex]=2;//visited
- return true;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement