Mam jako excersice szkoły do wdrożenia pierwszego wyszukiwania w języku Java. I wprowadziły niemal wszystko, ale problemem jest to, że moje wyszukiwanie nie działa i nie mogę znaleźć problem :(tak im prośbą o poradę do mnie i daj mi kilka guidlines na którym ewentualny problem może być.Szerokość pierwszego wyszukiwania - 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;
}
Dziękuję
Jak to działa? Bądź precyzyjny. – Borgleader
Wygląda na to, że eksploruje "niewłaściwe" węzły i ścieżkę. – mrjasmin
Masz wiele metod, których nam nie pokazujesz. Wydaje się, że wyodrębniasz węzły z dwóch różnych tablic/list i wstawiasz dostępne węzły do jednego. Twój stan jest również dziwny, powinieneś sprawdzić tylko listę "eksplorowanych" w klasycznej implementacji. Podstawową ideą jest: wyodrębnić pierwszy węzeł z początku listy, dodać wszystkich swoich sąsiadów na końcu tej samej listy. Zatrzymaj, gdy lista jest pusta lub gdy dodałeś węzeł docelowy do tej listy. – IVlad