/* C/C++ program to solve N Queen Problem using
backtracking */
#define N 8
#include <stdbool.h>
#include <stdio.h>
/* This function prints the solution */
void printSolution(int board[N][N]) {
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++)
printf(" %d ", board[i][j]);
printf("\n");
}
}
/* A function to check if a queen can
be placed on board[row][col]. */
bool check(int board[N][N], int row, int col) {
int i, j;
/* Check this row on left side */
for (i = 0; i < col; i++)
if (board[row][i])
return false;
/* Check upper diagonal on left side */
for (i = row, j = col; i >= 0 && j >= 0; i--, j--)
if (board[i][j])
return false;
/* Check lower diagonal on left side */
for (i = row, j = col; j >= 0 && i < N; i++, j--)
if (board[i][j])
return false;
return true;
}
/* A recursive function to solve N
Queen problem */
bool solveUtil(int board[N][N], int col)
{
/* base case: If all queens are placed
then return true */
if (col >= N)
return true;
for (int i = 0; i < N; i++) {
/* Check if the queen can be placed on
board[i][col] */
if (check(board, i, col)) {
board[i][col] = 1;
/* recur to place rest of the queens */
if (solveUtil(board, col + 1))
return true;
board[i][col] = 0; // BACKTRACK
}
}
return false;
}
int main() {
int board[N][N] = {0};
if (solveUtil(board, 0) == false) {
printf("Solution does not exist");
} else {
printf("Solution:\n");
printSolution(board);
}
return 0;
}
LyogQy9DKysgcHJvZ3JhbSB0byBzb2x2ZSBOIFF1ZWVuIFByb2JsZW0gdXNpbmcgCmJhY2t0cmFja2luZyAqLwojZGVmaW5lIE4gOCAKI2luY2x1ZGUgPHN0ZGJvb2wuaD4gCiNpbmNsdWRlIDxzdGRpby5oPgoKLyogVGhpcyBmdW5jdGlvbiBwcmludHMgdGhlIHNvbHV0aW9uICovCnZvaWQgcHJpbnRTb2x1dGlvbihpbnQgYm9hcmRbTl1bTl0pIHsgCiBmb3IgKGludCBpID0gMDsgaSA8IE47IGkrKykgeyAKICBmb3IgKGludCBqID0gMDsgaiA8IE47IGorKykgCiAgIHByaW50ZigiICVkICIsIGJvYXJkW2ldW2pdKTsgCiAgcHJpbnRmKCJcbiIpOyAKIH0KfQoKLyogQSBmdW5jdGlvbiB0byBjaGVjayBpZiBhIHF1ZWVuIGNhbiAKYmUgcGxhY2VkIG9uIGJvYXJkW3Jvd11bY29sXS4gKi8KYm9vbCBjaGVjayhpbnQgYm9hcmRbTl1bTl0sIGludCByb3csIGludCBjb2wpIHsgCiBpbnQgaSwgajsKLyogQ2hlY2sgdGhpcyByb3cgb24gbGVmdCBzaWRlICovCiBmb3IgKGkgPSAwOyBpIDwgY29sOyBpKyspIAogIGlmIChib2FyZFtyb3ddW2ldKSAKICAgcmV0dXJuIGZhbHNlOwovKiBDaGVjayB1cHBlciBkaWFnb25hbCBvbiBsZWZ0IHNpZGUgKi8KIGZvciAoaSA9IHJvdywgaiA9IGNvbDsgaSA+PSAwICYmIGogPj0gMDsgaS0tLCBqLS0pIAogIGlmIChib2FyZFtpXVtqXSkgCiAgIHJldHVybiBmYWxzZTsKLyogQ2hlY2sgbG93ZXIgZGlhZ29uYWwgb24gbGVmdCBzaWRlICovCiBmb3IgKGkgPSByb3csIGogPSBjb2w7IGogPj0gMCAmJiBpIDwgTjsgaSsrLCBqLS0pIAogIGlmIChib2FyZFtpXVtqXSkgCiAgIHJldHVybiBmYWxzZTsKcmV0dXJuIHRydWU7IAp9CgoKLyogQSByZWN1cnNpdmUgZnVuY3Rpb24gdG8gc29sdmUgTiAKUXVlZW4gcHJvYmxlbSAqLwpib29sIHNvbHZlVXRpbChpbnQgYm9hcmRbTl1bTl0sIGludCBjb2wpIAp7IAogLyogYmFzZSBjYXNlOiBJZiBhbGwgcXVlZW5zIGFyZSBwbGFjZWQgCiB0aGVuIHJldHVybiB0cnVlICovCiBpZiAoY29sID49IE4pIAogIHJldHVybiB0cnVlOwogZm9yIChpbnQgaSA9IDA7IGkgPCBOOyBpKyspIHsgCiAgLyogQ2hlY2sgaWYgdGhlIHF1ZWVuIGNhbiBiZSBwbGFjZWQgb24gCiAgYm9hcmRbaV1bY29sXSAqLwogIGlmIChjaGVjayhib2FyZCwgaSwgY29sKSkgeyAKICAgYm9hcmRbaV1bY29sXSA9IDE7Ci8qIHJlY3VyIHRvIHBsYWNlIHJlc3Qgb2YgdGhlIHF1ZWVucyAqLwogICBpZiAoc29sdmVVdGlsKGJvYXJkLCBjb2wgKyAxKSkgCiAgICByZXR1cm4gdHJ1ZTsKICAgYm9hcmRbaV1bY29sXSA9IDA7IC8vIEJBQ0tUUkFDSyAKICB9IAogfQogcmV0dXJuIGZhbHNlOyAKfQoKCmludCBtYWluKCkgeyAKIGludCBib2FyZFtOXVtOXSA9IHswfTsKIGlmIChzb2x2ZVV0aWwoYm9hcmQsIDApID09IGZhbHNlKSB7IAogIHByaW50ZigiU29sdXRpb24gZG9lcyBub3QgZXhpc3QiKTsgIAogfSBlbHNlIHsKICBwcmludGYoIlNvbHV0aW9uOlxuIik7CiAgcHJpbnRTb2x1dGlvbihib2FyZCk7IAogfQogcmV0dXJuIDA7Cn0=