public ArrayList<DirectedGraphNode> topSort(ArrayList<DirectedGraphNode> graph) {
        // write your code here
        ArrayList<DirectedGraphNode> res = new ArrayList<DirectedGraphNode>();
        HashMap<DirectedGraphNode, Integer> map = new HashMap<>();

        for (DirectedGraphNode node : graph) {
            for (DirectedGraphNode neig : node.neighbors) {
                if (map.containsKey(neig)) {
                    map.put(neig, map.get(neig) + 1);
                }
                else {
                    map.put(neig, 1);}
            }
        }
        Queue<DirectedGraphNode> q = new LinkedList<DirectedGraphNode>();
       for (DirectedGraphNode node : graph) {
           if (!map.containsKey(node)) {
               q.add(node);
               res.add(node);
           }
       }
       while (!q.isEmpty()) {
           DirectedGraphNode tmp = q.poll();
           for (DirectedGraphNode neig : tmp.neighbors) {
               map.put(neig, map.get(neig) - 1);

               if (map.get(neig) == 0) {
                 q.add(neig);
                 res.add(neig);
                }
           }     
       }
        return res;
    }

results matching ""

    No results matching ""