#include <stdio.h>
#include <math.h> // for abs() function
// Function to check if a queen can be placed at position x[k]
int place(int x[], int k) {
for (int i = 1; i < k; i++) {
if ((x
[i
] == x
[k
]) || (abs(x
[i
] - x
[k
]) == abs(i
- k
))) return 0;
}
return 1;
}
// Backtracking function to solve the N-Queens problem
int nqueens(int n) {
int x[20]; // max board size set to 20
int k = 1, count = 0;
x[k] = 0;
while (k != 0) {
x[k]++;
while ((x[k] <= n) && (!place(x, k)))
x[k]++;
if (x[k] <= n) {
if (k == n) {
printf("\nSolution %d\n", ++count
); for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n; j++) {
printf("%c ", (j
== x
[i
]) ? 'Q' : 'X'); }
}
} else {
k++;
x[k] = 0;
}
} else {
k--; // backtrack
}
}
return count;
}
// Main function
int main() {
int n;
printf("Enter the size of chessboard: "); printf("\nThe number of possibilities are %d\n", nqueens
(n
)); return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxtYXRoLmg+IC8vIGZvciBhYnMoKSBmdW5jdGlvbgoKLy8gRnVuY3Rpb24gdG8gY2hlY2sgaWYgYSBxdWVlbiBjYW4gYmUgcGxhY2VkIGF0IHBvc2l0aW9uIHhba10KaW50IHBsYWNlKGludCB4W10sIGludCBrKSB7CiAgICBmb3IgKGludCBpID0gMTsgaSA8IGs7IGkrKykgewogICAgICAgIGlmICgoeFtpXSA9PSB4W2tdKSB8fCAoYWJzKHhbaV0gLSB4W2tdKSA9PSBhYnMoaSAtIGspKSkKICAgICAgICAgICAgcmV0dXJuIDA7CiAgICB9CiAgICByZXR1cm4gMTsKfQoKLy8gQmFja3RyYWNraW5nIGZ1bmN0aW9uIHRvIHNvbHZlIHRoZSBOLVF1ZWVucyBwcm9ibGVtCmludCBucXVlZW5zKGludCBuKSB7CiAgICBpbnQgeFsyMF07IC8vIG1heCBib2FyZCBzaXplIHNldCB0byAyMAogICAgaW50IGsgPSAxLCBjb3VudCA9IDA7CiAgICB4W2tdID0gMDsKCiAgICB3aGlsZSAoayAhPSAwKSB7CiAgICAgICAgeFtrXSsrOwogICAgICAgIHdoaWxlICgoeFtrXSA8PSBuKSAmJiAoIXBsYWNlKHgsIGspKSkKICAgICAgICAgICAgeFtrXSsrOwogICAgICAgIAogICAgICAgIGlmICh4W2tdIDw9IG4pIHsKICAgICAgICAgICAgaWYgKGsgPT0gbikgewogICAgICAgICAgICAgICAgcHJpbnRmKCJcblNvbHV0aW9uICVkXG4iLCArK2NvdW50KTsKICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAxOyBpIDw9IG47IGkrKykgewogICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGogPSAxOyBqIDw9IG47IGorKykgewogICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIiVjICIsIChqID09IHhbaV0pID8gJ1EnIDogJ1gnKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJcbiIpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgaysrOwogICAgICAgICAgICAgICAgeFtrXSA9IDA7CiAgICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBrLS07IC8vIGJhY2t0cmFjawogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gY291bnQ7Cn0KCi8vIE1haW4gZnVuY3Rpb24KaW50IG1haW4oKSB7CiAgICBpbnQgbjsKICAgIHByaW50ZigiRW50ZXIgdGhlIHNpemUgb2YgY2hlc3Nib2FyZDogIik7CiAgICBzY2FuZigiJWQiLCAmbik7CiAgICBwcmludGYoIlxuVGhlIG51bWJlciBvZiBwb3NzaWJpbGl0aWVzIGFyZSAlZFxuIiwgbnF1ZWVucyhuKSk7CiAgICByZXR1cm4gMDsKfQo=