// This program solves the classic "8 queens" problem using recursive // backtracking. import java.util.*; public class Queens { 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); } // 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(); } // post: searches for a solution to the 8 queens problem with this // board, reporting result. public static void solve(Board solution) { if (!solve(solution, solution.size())) { System.out.println("No solution."); } else { System.out.println("One solution is as follows:"); solution.print(); } } // pre : queens have been safely placed in columns 1 through (col - 1) // post: recursively searchs the board for a solution starting at col, // returning true iff such a solution occurs and storing the // solution in board if it exists private static boolean solve(Board solution, int queensLeft) { if (queensLeft == 0) { return true; } else { for (int i = 1; i <= solution.size(); i++) { if (solution.safe(i, queensLeft)) { // choose solution.place(i, queensLeft); // recurse boolean isFound = solve(solution, queensLeft - 1); if (isFound) { return true; } // unchoose solution.remove(i, queensLeft); } } return false; } } }