public boolean findWhetherExistsPath(int n, int[][] graph, int start, int target) { if (graph.length == 0 || n <= 0) return false; Map<Integer, Set<Integer>> map = new HashMap<>(); for (int[] edge : graph) { Set<Integer> cur = map.getOrDefault(edge[0], new HashSet<>()); cur.add(edge[1]); map.put(edge[0], cur); } if (!map.containsKey(start)) return false; boolean[] visited = new boolean[n]; return dfs(map, visited, start, target);}public boolean dfs(Map<Integer, Set<Integer>> map, boolean[] visited, int start, int target) { if (start == target) return true; if (!map.containsKey(start)) return false; visited[start] = true; boolean flag = false; for (int to : map.get(start)) if (!visited[to] && dfs(map, visited, to, target)) flag = true; visited[start] = false; return flag;}