lojix/search/src/main/com/thesett/aima/search/examples/eightpuzzle/EightPuzzleState.java
public Iterator<Operator<String>> validOperators(boolean reverse)
    {
        // Used to hold a list of valid moves
        List<Operator<String>> moves = new ArrayList<Operator<String>>(4);

        // Check if the up move is valid
        if (emptyY != 0)
        {
            moves.add(new OperatorImpl<String>("U"));
        }

        // Check if the down move is valid
        if (emptyY != 2)
        {
            moves.add(new OperatorImpl<String>("D"));
        }

        // Check if the left move is valid
        if (emptyX != 0)
        {
            moves.add(new OperatorImpl<String>("L"));
        }

        // Check if the right move is valid
        if (emptyX != 2)
        {
            moves.add(new OperatorImpl<String>("R"));
        }

        return moves.iterator();
    }
public Iterator<Operator<String>> validOperators(boolean reverse)
    {
        // Used to hold a list of valid moves
        List<Operator<String>> moves = new ArrayList<Operator<String>>(4);

        // Check if the up move is valid
        if (emptyY != 0)
        {
            moves.add(new OperatorImpl<String>("U"));
        }

        // Check if the down move is valid
        if (emptyY != 2)
        {
            moves.add(new OperatorImpl<String>("D"));
        }

        // Check if the left move is valid
        if (emptyX != 0)
        {
            moves.add(new OperatorImpl<String>("L"));
        }

        // Check if the right move is valid
        if (emptyX != 2)
        {
            moves.add(new OperatorImpl<String>("R"));
        }

        return moves.iterator();
    }
Supplies the valid moves for a board position.

@param  reverse Don't care about reverse orderings. Ignored.

@return An iterator over all the moves which are valid for this board position. This can be all 4, 3 or just 2
moves, depending if the empty tile is in the middle, edge or corner positions.