// This program solves the classic "8 queens" problem using recursive // backtracking. import java.util.*; public class Queens { public static int counter = 0; public static void main(String[] args) { giveIntro(); Scanner console = new Scanner(System.in); System.out.print("What size board do you want to use? "); int size = console.nextInt(); System.out.println(); Board b = new Board(size); solve(b); } public static void solve(Board b) { solve(b, 0); System.out.println(counter); } // pre: numQueens is the number of queens that have been // safely placed on the board private static boolean solve(Board b, int numQueens) { if (numQueens == 8) { System.out.println(b); counter++; return false; } else { for (int row = 1; row <= b.size(); row++) { int col = numQueens + 1; if (b.isSafe(row, col)) { b.place(row, col); if (solve(b, numQueens + 1)) { return true; } b.remove(row, col); } } return false; } } // post: explains program to user public static void giveIntro() { System.out.println("This program solves the classic '8 queens'"); System.out.println("problem, placing queens on a chessboard so"); System.out.println("that no two queens threaten each other."); System.out.println(); } }