Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

public class Queens { // squares per row or column public static final int BOARD

ID: 3542107 • Letter: P

Question



public class Queens {

  // squares per row or column

  public static final int BOARD_SIZE = 8;


  // used to indicate an empty square

  public static final int EMPTY = 0;


  // used to indicate square contains a queen

  public static final int QUEEN = 1;


  private int board[][]; // chess board

  public Queens() {

  // -------------------------------------------------

  // Constructor: Creates an empty square board.

  // -------------------------------------------------

    board = new int[BOARD_SIZE][BOARD_SIZE];

  }  // end constructor         


  public void clearBoard() {

  // -------------------------------------------------

  // Clears the board.

  // Precondition: None.

  // Postcondition: Sets all squares to EMPTY.

  // -------------------------------------------------

  for(int i = 0 ; i < BOARD_SIZE; i++){

  for(int j = 0; j < BOARD_SIZE;j++){

  board[i][j] = EMPTY;

  }

  }

  

  

    // To be implemented in Programming Problem 1

  }  // end clearBoard


  public void displayBoard() {

  // -------------------------------------------------

  // Displays the board.

  // Precondition: None.

  // Postcondition: Board is written to standard

  // output; zero is an EMPTY square, one is a square

  // containing a queen (QUEEN).

  // -------------------------------------------------

   for (int i = 0; i < BOARD_SIZE; i++){

           System.out.println("");


         for (int j = 0; j <BOARD_SIZE; j++){

             System.out.print(board [i][j] + " ");

         }

   }

    // To be implemented in Programming Problem 1

  } // end displayBoard


  public boolean placeQueens(int column) {

  // -------------------------------------------------

  // Places queens in columns of the board beginning

  // at the column specified.

  // Precondition: Queens are placed correctly in

  // columns 1 through column-1.

  // Postcondition: If a solution is found, each

  // column of the board contains one queen and method

  // returns true; otherwise, returns false (no

  // solution exists for a queen anywhere in column

  // specified).

  // -------------------------------------------------

    if (column > BOARD_SIZE) {

      return true;  // base case

    }

    else {

      boolean queenPlaced = false;

      int row = 0;  // number of square in column


      while ( !queenPlaced && (row < BOARD_SIZE) )  {

        // if square can be attacked

        if (isUnderAttack(row, column)) {

          ++row;  // consider next square in column

        } // end if

        else { // place queen and consider next column

          setQueen(row, column);

          queenPlaced = placeQueens(column+1);

          // if no queen is possible in next column,

          if (!queenPlaced) {

            // backtrack: remove queen placed earlier

            // and try next square in column

            removeQueen(row, column);

            ++row;

          } // end if

        } // end if

      } // end while

      return queenPlaced;

    } // end if

  } // end placeQueens


  private void setQueen(int row, int column) {

  // --------------------------------------------------

  // Sets a queen at square indicated by row and

  // column.

  // Precondition: None.

  // Postcondition: Sets the square on the board in a

  // given row and column to QUEEN.

  // --------------------------------------------------

  board[row][column] = QUEEN;

  

    

  }  // end setQueen


  private void removeQueen(int row, int column) {

  // --------------------------------------------------

  // Removes a queen at square indicated by row and

  // column.

  // Precondition: None.

  // Postcondition: Sets the square on the board in a

  // given row and column to EMPTY.

  // --------------------------------------------------

    board[row][column] = EMPTY;

  

  }  // end removeQueen


  private boolean isUnderAttack(int row, int column) {

  // --------------------------------------------------

  // Determines whether the square on the board at a

  // given row and column is under attack by any queens

  // in the columns 1 through column-1.

  // Precondition: Each column between 1 and column-1

  // has a queen placed in a square at a specific row.

  // None of these queens can be attacked by any other

  // queen.

  // Postcondition: If the designated square is under

  // attack, returns true; otherwise, returns false.

  // --------------------------------------------------

  int r,c;

      // r = i

  // c = j

  

  // check row

  for(c = 0; c < BOARD_SIZE; c++ )

  if(board[row][c] == QUEEN)

  return true;;

  // Check column

  

  for(r = 0;r < BOARD_SIZE; r++)

  if(board[r][column] == QUEEN)

  return true;

  // right  down diagonal

  

  for( r = row, c = column; r < BOARD_SIZE && c < BOARD_SIZE; r++, c++)

  if(board[r][c] == QUEEN)

  return true;

  

  // right up and left

  

  for(r = row, c = column; r >= 0 && c >= 0; r--,c--)

  if(board[r][c] == QUEEN)

  return true;

  // right up and right

  for(r = row, c = column; r >= 0 && c < BOARD_SIZE; r--,c++)

  if(board[r][c] == QUEEN)

  return true;

  // right diagonal down and left

  for(r = row, c = column; r < BOARD_SIZE && c >= 0; r++,c--)

  if(board[r][c] == QUEEN)

  return true;

  

  return false;

  

  }  // end isUnderAttack


  private int index(int number) {

return 0;

  // --------------------------------------------------

  // Returns the array index that corresponds to

  // a row or column number.

  // Precondition: 1 <= number <= BOARD_SIZE.

  // Postcondition: Returns adjusted index value.

  // --------------------------------------------------

    // To be implemented in Programming Problem 1

  }

public static void main(String[] args) {

    Queens main = new Queens();

    main.placeQueens(0);

    main.displayBoard();

}

  }  // end index

// end Queens

Explanation / Answer

Deadline for this assignment ?