【Leetcode】210. Course Schedule II(思路)

132 阅读1分钟

题目地址:

leetcode.com/problems/co…

屏幕截图 2022-01-15 135818.png

import java.util.*;

public class Solution {
    public int[] findOrder(int numCourses, int[][] prerequisites) {
        
        
         
            // 每次出队一个数就将其加入答案数组中
             
                	// 将邻居节点入度减少1
                     
                    // 如果入度减少到0,则加入队列
                    
    }
    
    private Map<Integer, List<Integer>> buildGraph(int[][] prerequisites) {
        Map<Integer, List<Integer>> map = new HashMap<>();
        for (int[] prerequisite : prerequisites) {
            map.putIfAbsent(prerequisite[1], new ArrayList<>());
            map.get(prerequisite[1]).add(prerequisite[0]);
        }
        
        return map;
    }
}

屏幕截图 2022-01-15 140010.png

import java.util.*;

public class Solution {
    public int[] findOrder(int numCourses, int[][] prerequisites) {
        
    
      
            	// 如果发现了环,则直接返回空数组
             
    }
    
    // 函数功能是,从cur开始做DFS,并按照递归返回的顺序将访问过的顶点入栈;
    // 返回是否发现了环;如果有环则返回true,否则返回false
     
    	// 标记当前点为正在访问
         
            	// 如果发现某个邻居在本次DFS时访问过,说明有环,返回true;
            	// 否则如果邻居未访问,则对其进行访问
                 
        // 递归返回前要标记当前顶点为已访问过
         
        // 递归返回前要把当前顶点进栈
   
    
    private Map<Integer, List<Integer>> buildGraph(int[][] prerequisites) {
        Map<Integer, List<Integer>> map = new HashMap<>();
        for (int[] prerequisite : prerequisites) {
            map.putIfAbsent(prerequisite[1], new ArrayList<>());
            map.get(prerequisite[1]).add(prerequisite[0]);
        }
        
        return map;
    }
}