Advertisement
libardorengifo

BoardStack for 8 queens backtracking JAVA

Dec 1st, 2020
476
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.16 KB | None | 0 0
  1. package pkg8.reinas;
  2.  
  3. public class BoardStack {
  4.  
  5.     final private int[][] board;
  6.     final private int queens;
  7.  
  8.     public BoardStack(int queens) {
  9.         board = new int[queens][queens];
  10.         this.queens = queens;
  11.         fillBoard();
  12.     }
  13.  
  14.     public void fillBoard() {
  15.         for (int i = 0; i < queens; i++) {
  16.             for (int j = 0; j < queens; j++) {
  17.                 board[i][j] = 0;
  18.             }
  19.         }
  20.     }
  21.  
  22.     public void addQueen(int row, int column) {
  23.         board[row][column] = 1;
  24.     }
  25.  
  26.     public void removeQueen(int row, int column) {
  27.         board[row][column] = 0;
  28.     }
  29.  
  30.     private boolean hasQueenInBox(int row, int column) {
  31.         return board[row][column] == 1;
  32.     }
  33.  
  34.     public boolean isGoodRow(int row) {
  35.         for (int column = 0; column < queens; column++) {
  36.             if (board[row][column] == 1) return false;
  37.         }
  38.         return true;
  39.     }
  40.  
  41.     public boolean isGoodColumn(int column) {
  42.         for (int row = 0; row < queens; row++) {
  43.             if ( board[row][column] == 1) return false;
  44.         }
  45.         return true;
  46.     }
  47.  
  48.     public boolean isGoodDiagonal1(Queen queen) {
  49.         int row = queen.getRow();
  50.         int column = queen.getColumn();
  51.         while ((row != -1) && (column != -1)) {
  52.  
  53.             if (board[row][column] == 1) {
  54.                 return false;
  55.             }
  56.             row--;
  57.             column--;
  58.         }
  59.         row = queen.getRow();
  60.         column = queen.getColumn();
  61.         while ((row < queens) && (column < queens)) {
  62.  
  63.             if (board[row][column] == 1) {
  64.                 return false;
  65.             }
  66.             row++;
  67.             column++;
  68.         }
  69.  
  70.         return true;
  71.     }
  72.  
  73.     public boolean isGoodDiagonal2(Queen queen) {
  74.         int row = queen.getRow();
  75.         int column = queen.getColumn();
  76.         while ((row != -1) && (column < queens)) {
  77.  
  78.             if (board[row][column] == 1) {
  79.                 return false;
  80.             }
  81.             row--;
  82.             column++;
  83.         }
  84.         row = queen.getRow();
  85.         column = queen.getColumn();
  86.         while ((row < queens) && (column >= 0)) {
  87.  
  88.             if (board[row][column] == 1) {
  89.                 return false;
  90.             }
  91.             row++;
  92.             column--;
  93.         }
  94.  
  95.         return true;
  96.     }
  97.  
  98.     public boolean isGoodChessBox(Queen queen) {
  99.         return isGoodColumn(queen.getColumn())
  100.                 && isGoodRow(queen.getRow())
  101.                 && isGoodDiagonal1(queen)
  102.                 && isGoodDiagonal2(queen);
  103.     }
  104.  
  105.     public void addQueen(Queen queen) {
  106.         addQueen(queen.getRow(), queen.getColumn());
  107.     }
  108.  
  109.     public void removeQueen(Queen queen) {
  110.         removeQueen(queen.getRow(), queen.getColumn());
  111.     }
  112.  
  113.     public void printBoard() {
  114.         for (int row = 0; row < queens; row++) {
  115.             for (int column = 0; column < queens; column++) {
  116.                 if (hasQueenInBox(row, column)) {
  117.                     Helpers.log("Q ");
  118.                 } else {
  119.                     Helpers.log("# ");
  120.                 }
  121.             }
  122.             Helpers.logLn("\n");
  123.         }
  124.     }
  125. }
  126.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement