package zutil.algo.path; import java.util.HashSet; import java.util.LinkedList; import java.util.Queue; /** * A class that uses BFS to find a path * * @author Ziver */ public class BreadthFirstSearch implements PathFinder{ /** * Returns the first path to the destination * * @param start is the start Node * @param stop is the goal Node * @return A list with the path */ public LinkedList find(PathNode start, PathNode stop){ Queue queue = new LinkedList(); HashSet visited = new HashSet(); queue.add(start); visited.add( start ); PathNode tmp; while(!queue.isEmpty()){ tmp = queue.poll(); for(PathNode next : tmp.getNeighbors()){ if(!visited.contains( next ) && tmp.getNeighborCost(next) > 0){ queue.add(next); visited.add( next ); next.setParentNeighbor(tmp); if(next.equals(stop)){ return stop.traversTo(start); } } } } return new LinkedList(); } }