// Option 5 public void shortestByHops(String c1, String c2) { System.out.println("FEWEST HOPS from " + c1 + " to " + c2); System.out.println("---------------------------------------------"); City city1 = null; City city2 = null; for (int i = 0; i < numCities; i++) { if (cities[i].name().equals(c1)) { city1 = cities[i]; } if (cities[i].name().equals(c2)) { city2 = cities[i]; } } if (c1.equals(c2) || city1 == null || city2 == null) { System.out.println("Invalid city choice(s)"); return; } marked = new boolean[numCities]; distTo = new int[numCities]; edgeTo = new Route[numCities]; for (int i = 0; i < numCities; i++) distTo[i] = Integer.MAX_VALUE; bfs(city1.id() - 1); if (distTo[city2.id() - 1] == Integer.MAX_VALUE) { System.out.println("No path"); return; } System.out.printf("Fewest hops from %s to %s is %d\n", c1, c2, distTo[city2.id() - 1]); City currCity = city2; for (Route r = edgeTo[city2.id() - 1]; r != null; r = edgeTo[currCity.id() - 1]) { System.out.print(currCity + " "); currCity = r.other(currCity); } System.out.println(currCity); }