Topological Sorting

public class Solution {
    public ArrayList<DirectedGraphNode> topSort(ArrayList<DirectedGraphNode> graph) {
        HashMap<DirectedGraphNode, Integer> map = new HashMap();
        for (DirectedGraphNode node : graph) {
            if(!map.containsKey(node)) map.put(node, 0);
            for (DirectedGraphNode neighbor : node.neighbors) {
                if (map.containsKey(neighbor)) {
                    map.put(neighbor, map.get(neighbor) + 1);
                } else {
                    map.put(neighbor, 1); 
                }
            }
        }
        ArrayList<DirectedGraphNode> result = new ArrayList<DirectedGraphNode>();
        for(DirectedGraphNode node : graph){
            if(!map.containsKey(node) || map.get(node) == 0)dfs(node, map, graph, result);
        }
        return result;
    }
    
    public void dfs(DirectedGraphNode node, 
                    HashMap<DirectedGraphNode, Integer> map, 
                    ArrayList<DirectedGraphNode> graph, 
                    ArrayList<DirectedGraphNode> result){
        map.put(node, -1);
        result.add(node);
        for(DirectedGraphNode neighbor : node.neighbors){
            map.put(neighbor, map.get(neighbor) - 1);
            if(map.get(neighbor) == 0) dfs(neighbor, map, graph, result);
        }
        return ;
    }
}

最后更新于

这有帮助吗?