diff --git a/src/Traverse.java b/src/Traverse.java index 1736d21..df95474 100644 --- a/src/Traverse.java +++ b/src/Traverse.java @@ -29,9 +29,9 @@ 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 +69,40 @@ 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)); + } + + //HashMap traversal + public static boolean reachable(Map> graph, int start, int end){ + Set seen = new HashSet<>(); + return reachable(graph, start, end, seen); + } + + private static boolean reachable(Map> graph, int start, int end, Set seen){ + if(start == end) return true; + if(seen.contains(start) || graph == null || !graph.containsKey(start) || graph.get(start) == null) return false; + seen.add(start); + + for (int neighbor : graph.get(start)) { + if(reachable(graph, neighbor, end, seen)) return true; + } + + return false; + } + + //Person traversal + public static void printGossipers(Person person){ + printGossipers(person, new HashSet<>()); + } + + private static void printGossipers(Person person, Set seen){ + if(person == null || seen.contains(person)) return; + seen.add(person); + System.err.println(person.getName()); + + for (Person confidant : person.getConfidants()) { + printGossipers(confidant, seen); + } } }