// The 8-queens game class Queen { int row; int column; public Queen () { row = 99; column = 88; } public Queen (int r, int c) { row = r; column = c; } public String toString () { String result = ""; result = result + "(" + row + ", " + column + ")"; return result; } } class QueensGame { public static void main (String[] args) { Queen[] board = new Queen[8]; for (int i = 0; i < 8; i++) board[i] = new Queen(); print (board); play (board, 0); print (board); } // end main static boolean play (Queen[] board, int row) { if (row == 8) return true; for (int column = 0; column != 8; column++) { if (! conflict(board, row, column)) { addQueen(board, row, column); if (play (board, row + 1)) //Proceed to next row return true; removeQueen(board); } } return false; } // end play static Queen[] addQueen (Queen[] board, int row1, int column1) { int i = 0; while (board[i].row != 99) i = i + 1; board[i] = new Queen (row1, column1); return board; } static Queen[] removeQueen (Queen[] board) { int i = 0; while (board[i].row != 99) i = i + 1; board[i-1] = new Queen (); return board; } static Queen[] print (Queen[] board) { for (int i = 0; i < 8; i++) System.out.print (board[i] + " "); System.out.println(); return board; } // Method, conflict, checks if a queen can be added in a specified position static boolean conflict (Queen[] board, int row, int column) { for (int i = 0; i < 8; i++) { int queenrow = board[i].row; int queencolumn = board[i].column; if (threat (row, column, queenrow, queencolumn)) return true; } return false; } // end conflict // Method, threat, checks if two queens threaten each other static boolean threat (int row1, int column1, int row2, int column2) { boolean result = (row1 == row2 || column1 == column2 || (row1 - column1) == (row2 - column2) || (row1 + column1) == (row2 + column2)); return result; } // end threat } // end class