八皇后回溯算法
#include<bits/stdc++.h>
using namespace std;
int col[8] = {0};
int positive[15] = {0};
int anti[15] = {0};
int rs[8] = {0};
int resultCount = 0;
bool check(int i, int j) {
if (!col[j] && !positive[j - i + 7] && !anti[i + j]) {
return true;
}
return false;
}
void printBoard() {
cout << "第" << resultCount++ << "种:" << endl;
for (int r : rs) {
for (int j = 0; j < 8; ++j) {
if (j == r) {
cout << " X ";
} else {
cout << " * ";
}
}
cout << endl;
}
cout << "--------------------------" << endl;
}
void Queen(int n) {
if (n == 8) {
printBoard();
return ;
}
for (int i = 0; i < 8; ++i) {
rs[n] = i;
if (check(n, i)) {
col[i] = 1;
positive[i - n + 7] = 1;
anti[i + n] = 1;
Queen(n + 1);
col[i] = 0;
positive[i - n + 7] = 0;
anti[i + n] = 0;
}
}
}
int main() {
Queen(0);
cout << "共" << resultCount << "种" << endl;
return 0;
}