Question:
Write an algorithm to print all ways of arranging eight queens on a chess board so that none of them share the same row, column or diagonal.
Answer:
#include <iostream>
using namespace std;
int ans[8];
int n = 0;
// row i put column j
bool isOK(int i, int j) {
for (int k = 0; k < i; k++) {
if ((j == ans[k]) || ((j - i) == (ans[k] - k)) || ((j + i) == (ans[k]
+ k))) {
return false;
}
}
return true;
}
void dfs(int i) {
if (i == 8) {
n = n + 1;
cout << "find a solution " << endl;
for (int j = 0; j < 8; j++) {
cout << ans[j] << " ";
}
cout << endl;
return;
} else {
// try from the first to the last column
for (int j = 0; j < 8; j++) {
if (isOK(i, j)) {
ans[i] = j;
dfs(i + 1);
}
}
}
}
int main() {
dfs(0);
cout << "solution number is " << n << endl;
}
Result is:
find a solution
0 4 7 5 2 6 1 3
find a solution
0 5 7 2 6 3 1 4
find a solution
0 6 3 5 7 1 4 2
find a solution
0 6 4 7 1 3 5 2
find a solution
1 3 5 7 2 0 6 4
find a solution
1 4 6 0 2 7 5 3
find a solution
1 4 6 3 0 7 5 2
find a solution
1 5 0 6 3 7 2 4
find a solution
1 5 7 2 0 3 6 4
find a solution
1 6 2 5 7 4 0 3
find a solution
1 6 4 7 0 3 5 2
find a solution
1 7 5 0 2 4 6 3
find a solution
2 0 6 4 7 1 3 5
find a solution
2 4 1 7 0 6 3 5
find a solution
2 4 1 7 5 3 6 0
find a solution
2 4 6 0 3 1 7 5
find a solution
2 4 7 3 0 6 1 5
find a solution
2 5 1 4 7 0 6 3
find a solution
2 5 1 6 0 3 7 4
find a solution
2 5 1 6 4 0 7 3
find a solution
2 5 3 0 7 4 6 1
find a solution
2 5 3 1 7 4 6 0
find a solution
2 5 7 0 3 6 4 1
find a solution
2 5 7 0 4 6 1 3
find a solution
2 5 7 1 3 0 6 4
find a solution
2 6 1 7 4 0 3 5
find a solution
2 6 1 7 5 3 0 4
find a solution
2 7 3 6 0 5 1 4
find a solution
3 0 4 7 1 6 2 5
find a solution
3 0 4 7 5 2 6 1
find a solution
3 1 4 7 5 0 2 6
find a solution
3 1 6 2 5 7 0 4
find a solution
3 1 6 2 5 7 4 0
find a solution
3 1 6 4 0 7 5 2
find a solution
3 1 7 4 6 0 2 5
find a solution
3 1 7 5 0 2 4 6
find a solution
3 5 0 4 1 7 2 6
find a solution
3 5 7 1 6 0 2 4
find a solution
3 5 7 2 0 6 4 1
find a solution
3 6 0 7 4 1 5 2
find a solution
3 6 2 7 1 4 0 5
find a solution
3 6 4 1 5 0 2 7
find a solution
3 6 4 2 0 5 7 1
find a solution
3 7 0 2 5 1 6 4
find a solution
3 7 0 4 6 1 5 2
find a solution
3 7 4 2 0 6 1 5
find a solution
4 0 3 5 7 1 6 2
find a solution
4 0 7 3 1 6 2 5
find a solution
4 0 7 5 2 6 1 3
find a solution
4 1 3 5 7 2 0 6
find a solution
4 1 3 6 2 7 5 0
find a solution
4 1 5 0 6 3 7 2
find a solution
4 1 7 0 3 6 2 5
find a solution
4 2 0 5 7 1 3 6
find a solution
4 2 0 6 1 7 5 3
find a solution
4 2 7 3 6 0 5 1
find a solution
4 6 0 2 7 5 3 1
find a solution
4 6 0 3 1 7 5 2
find a solution
4 6 1 3 7 0 2 5
find a solution
4 6 1 5 2 0 3 7
find a solution
4 6 1 5 2 0 7 3
find a solution
4 6 3 0 2 7 5 1
find a solution
4 7 3 0 2 5 1 6
find a solution
4 7 3 0 6 1 5 2
find a solution
5 0 4 1 7 2 6 3
find a solution
5 1 6 0 2 4 7 3
find a solution
5 1 6 0 3 7 4 2
find a solution
5 2 0 6 4 7 1 3
find a solution
5 2 0 7 3 1 6 4
find a solution
5 2 0 7 4 1 3 6
find a solution
5 2 4 6 0 3 1 7
find a solution
5 2 4 7 0 3 1 6
find a solution
5 2 6 1 3 7 0 4
find a solution
5 2 6 1 7 4 0 3
find a solution
5 2 6 3 0 7 1 4
find a solution
5 3 0 4 7 1 6 2
find a solution
5 3 1 7 4 6 0 2
find a solution
5 3 6 0 2 4 1 7
find a solution
5 3 6 0 7 1 4 2
find a solution
5 7 1 3 0 6 4 2
find a solution
6 0 2 7 5 3 1 4
find a solution
6 1 3 0 7 4 2 5
find a solution
6 1 5 2 0 3 7 4
find a solution
6 2 0 5 7 4 1 3
find a solution
6 2 7 1 4 0 5 3
find a solution
6 3 1 4 7 0 2 5
find a solution
6 3 1 7 5 0 2 4
find a solution
6 4 2 0 5 7 1 3
find a solution
7 1 3 0 6 4 2 5
find a solution
7 1 4 2 0 6 3 5
find a solution
7 2 0 5 1 4 6 3
find a solution
7 3 0 2 5 1 6 4
solution number is 92