diff --git a/src/Traverse.java b/src/Traverse.java index 1736d21..9325ac6 100644 --- a/src/Traverse.java +++ b/src/Traverse.java @@ -29,9 +29,10 @@ public static void main(String[] args) { eve.getConfidants().addAll(Arrays.asList(frank, irene)); frank.getConfidants().addAll(Arrays.asList(bob, grace)); grace.getConfidants().add(henry); - henry.getConfidants().addAll(Arrays.asList(alice, diana)); - irene.getConfidants().addAll(Arrays.asList(jack, diana)); - jack.getConfidants().addAll(Arrays.asList(charlie, bob)); + + henry.getConfidants().addAll(Arrays.asList(irene)); + irene.getConfidants().addAll(Arrays.asList(jack)); + jack.getConfidants().addAll(Arrays.asList(henry)); Map> graph = new HashMap<>(); @@ -69,5 +70,47 @@ public static void main(String[] args) { v45.neighbors = new ArrayList<>(List.of(v23)); v23.neighbors = new ArrayList<>(List.of()); v67.neighbors = new ArrayList<>(List.of(v91)); + + System.out.println(reachable(graph, 3, 45)); + } + + public static boolean reachable(Map> graph, int start, int end) { + Set visited = new HashSet<>(); + + return reachable(graph, start, end, visited); + } + + public static boolean reachable(Map> graph, int start, int end, Set visited) { + if (start == end) return true; + if (visited.contains(start) || + graph == null || + !graph.containsKey(start) || + graph.get(start) == null + ) return false; + + visited.add(start); + + for (Integer integer : graph.get(start)) { + if (reachable(graph, integer, end, visited)) return true; + } + + return false; + } + + public static void printGossipers(Person person) { + Set visited = new HashSet<>(); + + printGossipers(person, visited); + } + + public static void printGossipers(Person person, Set visited) { + if (person == null || visited.contains(person)) return; + + visited.add(person); + System.out.println(person.getName()); + + for(Person confidant : person.getConfidants()) { + printGossipers(confidant, visited); + } } }