本文共 2022 字,大约阅读时间需要 6 分钟。
给定一个有向图,判断其是否存在环。图有n个顶点,标号从1到n。每个顶点可以有出边,但没有入边的限制。
为了判断有向图是否存在环,可以使用深度优先搜索(DFS)进行遍历。具体步骤如下:
import java.util.*;public class Solution { public boolean isCyclicGraph(int[] start, int[] end) { if (start == null || start.length == 0) { return false; } int n = 0; for (int s : start) { n = Math.max(n, s); } for (int e : end) { n = Math.max(n, e); } Map > graph = buildGraph(start, end); int[] visited = new int[n + 1]; Arrays.fill(visited, -1); for (int i = 1; i <= n; i++) { if (visited[i] == -1 && dfs(graph, i, visited)) { return true; } } return false; } private boolean dfs(Map > graph, int cur, int[] visited) { visited[cur] = 0; List neighbors = graph.get(cur); if (neighbors != null) { for (int next : neighbors) { if (visited[next] == 0) { return true; } if (visited[next] == -1 && dfs(graph, next, visited)) { return true; } } } visited[cur] = 1; return false; } private Map > buildGraph(int[] start, int[] end) { Map > graph = new HashMap<>(); for (int i = 0; i < start.length; i++) { int s = start[i]; int e = end[i]; if (graph.containsKey(s)) { graph.get(s).add(e); } else { graph.put(s, new ArrayList<>()); graph.get(s).add(e); } } return graph; }} 转载地址:http://bhds.baihongyu.com/