Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public ArrayList<String> BFS(String origin, String dest) {
- Queue<CityNode> queue = new LinkedList<CityNode>();
- Map<CityNode, CityNode> nodes = new HashMap<>();
- CityNode cityOrigin = cities.get(origin);
- CityNode cityDest = cities.get(dest);
- ArrayList<CityNode> visitedCities = new ArrayList<CityNode>();
- queue.offer(cityOrigin);
- nodes.put(cityOrigin, null);
- visitedCities.add(cityOrigin);
- boolean found = false;
- while (!queue.isEmpty()) {
- CityNode node = queue.poll();
- if (node == cityDest) {
- found = true;
- break;
- }
- for (int i = 0; i < node.connected.size(); i++) {
- CityNode c = node.connected.get(i);
- if (!visitedCities.contains(c)) {
- queue.offer(c);
- visitedCities.add(c);
- nodes.put(c, node);
- }
- }
- }
- if (found) {
- ArrayList<String> path = new ArrayList<String>();
- CityNode curr = cityDest;
- while (curr != null) {
- path.add(0, curr.name);
- curr = nodes.get(curr); //This returns the predecessor of the current CityNode
- }
- return path;
- } else
- return null;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement