Tengo como excersice de la escuela para implementar la primera búsqueda de ancho en java. He implementado casi todo, pero el problema es que mi búsqueda no funciona y no puedo encontrar el problema :(Así que estoy pidiendo que me asesoramiento y dame algunos actuales directivas sobre dónde la eventual problema podría ser.Breadth First Search - Java
public ArrayList<SearchNode> search(Problem p) {
// The frontier is a queue of expanded SearchNodes not processed yet
frontier = new NodeQueue();
/// The explored set is a set of nodes that have been processed
explored = new HashSet<SearchNode>();
// The start state is given
GridPos startState = (GridPos) p.getInitialState();
// Initialize the frontier with the start state
frontier.addNodeToFront(new SearchNode(startState));
// Path will be empty until we find the goal.
path = new ArrayList<SearchNode>();
// The start NODE
SearchNode node = new SearchNode(startState);
// Check if startState = GoalState??
if(p.isGoalState(startState)){
path.add(new SearchNode(startState));
return path;
}
do {
node = frontier.removeFirst();
explored.add(node);
ArrayList reachable = new ArrayList<GridPos>();
reachable = p.getReachableStatesFrom(node.getState());
SearchNode child;
for(int i = 0; i< reachable.size(); i++){
child = new SearchNode((GridPos)reachable.get(i));
if(!(explored.contains(child) || frontier.contains(child))){
if(p.isGoalState(child.getState())){
path = child.getPathFromRoot() ;
return path;
}
frontier.addNodeToFront(child);
}
}
}while(!frontier.isEmpty());
return path;
}
Gracias
¿Cómo no funciona? Se preciso. – Borgleader
Parece que está explorando los nodos y la ruta "equivocados". – mrjasmin
Tiene muchos métodos que no nos está mostrando. Parece que está extrayendo nodos de dos matrices/listas diferentes e insertando los nodos alcanzables en solo uno. Su condición también es extraña, solo debe verificar la lista 'explorada', en una implementación clásica. La idea básica es: extraer el primer nodo del principio de una lista, agregar todos sus vecinos al final de la misma lista. Deténgase cuando la lista esté vacía o cuando haya agregado el nodo de destino a esa lista. – IVlad