Ho come excersice scolastico per implementare ampiezza prima ricerca in Java. Ho implementato quasi tutto, ma il problema è che la mia ricerca non funziona e non posso trovare il problema :(Così Im che chiede di consigliare me e darmi qualche guidlines su dove l'eventuale problema potrebbe essere.Larghezza Prima ricerca - 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;
}
Grazie
Come funziona? Sii preciso – Borgleader
Sembra che stia esplorando i nodi e il percorso "sbagliati". – mrjasmin
Hai molti metodi che non ci stai mostrando. Sembra che stiate estraendo nodi da due diversi array/liste e inserendo i nodi raggiungibili solo in uno. Anche la tua condizione è strana, dovresti solo controllare la lista "esplorata", in un'implementazione classica. L'idea di base è: estrai il primo nodo dall'inizio di una lista, aggiungi tutti i suoi vicini alla fine della stessa lista. Interrompi quando l'elenco è vuoto o quando hai aggiunto il nodo di destinazione a quell'elenco. – IVlad