ai-22 / src / am / aua / search / TreeSearch.java
TreeSearch.java
Raw
package am.aua.search;


public class TreeSearch implements Search {

    private Frontier frontier;

    // statistics
    // keeps track of how many nodes where generated during last search
    private int steps;

    public TreeSearch (Frontier frontier) {
        this.frontier = frontier;
        steps = 0;
    }

    @Override
    public Node search(State initialState, GoalTest test) {
        frontier.clear();
        steps = 1;

        Node node = new Node(null, null, initialState);
        if (test.isGoal(node.state))
            return node;
        frontier.add(node);
        while (!frontier.isEmpty()) {
            node = frontier.remove();
            if (test.isGoal(node.state)) return node;
            for (Action action : node.state.getApplicableActions()) {
                State newState = node.state.getActionResult(action);
                Node child = new Node(node, action, newState);
                steps++;
                frontier.add(child);
            }
        }
        return null;
    }

    @Override
    public int steps() {
        return steps;
    }

    @Override
    public int stretchFactor() {
        return frontier.stretchFactor();
    }

    @Override
    public String toString() {
        return frontier + " Tree Search";
    }
}