diff --git a/src/Traverse.java b/src/Traverse.java index 1736d21..c6815c7 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,41 @@ 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)); + + //printGossipers(jack); + System.out.println(reachable(graph, 3, 56)); + System.out.println(reachable(graph, 45, 3)); + 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(int neighbor : graph.get(start)) { + if(reachable(graph, neighbor, 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); + } } }