#include using namespace std; const int NUMBER_OF_QUEENS = 8; // Constant: eight queens // queens are placed at (i, queens[i]) // -1 indicates that no queen is currently placed in the ith row // Initially, place a queen at (0, 0) in the 0th row int queens[NUMBER_OF_QUEENS] = {-1, -1, -1, -1, -1, -1, -1, -1}; // Check whether a queen can be placed at row i and column j bool isValid(int row, int column) { for (int i = 1; i <= row; i++) if (queens[row - i] == column // Check column || queens[row - i] == column - i // Check upper left diagonal || queens[row - i] == column + i) // Check upper right diagonal return false; // There is a conflict return true; // No conflict } // Display the chessboard with eight queens void printResult() { cout << "\n---------------------------------\n"; for (int row = 0; row < NUMBER_OF_QUEENS; row++) { for (int column = 0; column < NUMBER_OF_QUEENS; column++) printf(column == queens[row] ? "| Q " : "| "); cout << "|\n---------------------------------\n"; } } // Find a position to place a queen in row k int findPosition(int k) { int start = queens[k] + 1; // Search for a new placement for (int j = start; j < NUMBER_OF_QUEENS; j++) { if (isValid(k, j)) return j; // (k, j) is the place to put the queen now } return -1; } // Search for a solution bool search() { // k - 1 indicates the number of queens placed so far // We are looking for a position in the kth row to place a queen int k = 0; while (k >= 0 && k < NUMBER_OF_QUEENS) { // Find a position to place a queen in the kth row int j = findPosition(k); if (j < 0) { queens[k] = -1; k--; // back track to the previous row } else { queens[k] = j; k++; } } if (k == -1) return false; // No solution else return true; // A solution is found } int main() { search(); // Start search from row 0. Note row indices are 0 to 7 printResult(); // Display result return 0; }