LeetCode——Course Schedule

題目描述

題目描述

思路

  • 將prerequisites讀取寫成從某個節點出發能夠達到的下一個點是哪些。

好比:[1,0][0,1][2,1]就轉變爲java

0:[1]node

1:[0,2]數組

2:[]ui

  • 設置visited數組,來判斷某節點處於未訪問狀態(0)、正在訪問狀態(-1)以及已訪問狀態(1)這三種狀態。spa

  • 使用DFS來訪問每一個節點判斷是否存在環code

代碼實現

class Solution {
    public boolean canFinish(int numCourses, int[][] prerequisites) {
        
        ArrayList<ArrayList<Integer>> processResult = new ArrayList<ArrayList<Integer>>();
        int[] visited = new int[numCourses];
        for(int i = 0; i < numCourses; i++){
            ArrayList<Integer> temp = new ArrayList<Integer>();
            processResult.add(temp);
            visited[i]  = 0;
        }
        for(int i = 0; i < prerequisites.length; i++){
            processResult.get(prerequisites[i][1]).add(prerequisites[i][0]);
        }
        
        for(int i=0;i<numCourses;i++){
            for(Integer num:processResult.get(i)){
                System.out.println(num);
            }
        }
        
        
        for(int i = 0;i<numCourses;i++){
            if(!dfs(i, processResult,visited)){
                return false;
            }
        }
        
        
        return true;
    }
    
    public boolean dfs(int i,ArrayList<ArrayList<Integer>> processResult, int[] visited){
        if(visited[i] == 1){
            return true;
        }else if(visited[i] == -1){
            return false;
        }else{
            ArrayList<Integer> path = processResult.get(i);
            visited[i] = -1;
            for(Integer node:path){
                if(!dfs(node, processResult, visited)){
                    return false;
                }
            }
            visited[i] = 1;
        }
        return true;
    }
}
複製代碼
相關文章
相關標籤/搜索