有向图判环

https://www.lintcode.com/zh-cn/problem/directed-graph-loop/

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class Solution {
    /**
     * @param start: The start points set
     * @param end: The end points set
     * @return: Return if the graph is cyclic
     */
    public boolean isCyclicGraph(int[] start, int[] end) {
        // Write your code here
        Map> map = new HashMap<>();
        for (int i = 0; i < start.length; i++) {
            List list = map.get(start[i]);
            if (list == null) {
                list = new ArrayList<>();
                map.put(start[i], list);
            }
            list.add(end[i]);
        }
        List list = new ArrayList<>();
        for (int i = 0; i < start.length; i++) {
            list.clear();
            boolean b = treeWalk(start[i], list, map);
            if (b) {
                return true;
            }
        }
        return false;
    }

    private boolean treeWalk(int i, List list, Map> map) {
        if (list.contains(i)) {
            return true;
        }
        list.add(i);
        List list1 = map.remove(i);
        if (list1 == null) {
            return false;
        }
        for (int j = 0; j < list1.size(); j++) {
            Integer integer = list1.get(j);
            boolean b = treeWalk(integer, list, map);
            if (b) {
                return true;
            }
        }
        return false;
    }
}

你可能感兴趣的:(有向图判环)