八皇后问题我就不再这里说明题意了
我在这里说说限定条件
q(x,y) Q(x1,y1)
有以下四个限定条件
(1)x=x1
(2)y=y1
(3)x+y=x1+y1
(4)x-y=x1-y1
用到算法中就这样有92组解
#include <cstdio>
#include <cstring>
#include <cmath>
using namespace std;
int x[10], n;
int num;
bool ok(int k) {
for(int i = 0; i < k; i++)
if(x[i] == x[k] || abs(i-k) == abs(x[i]-x[k])) //限定条件
return 1;
return 0;
}
void dfs(int q) {
if(q == 8) {
printf("%d\n", ++num);
for(int i = 0; i < n; i++)
printf("%d ", x[i]+1);
printf("\n");
return;
}
for(int i = 0; i < n; i++) { //所有列摆放的位置,列坐标的情况也就都考虑,这样就铜盘考虑了
x[q] = i;
if(ok(q)) continue;<span style="white-space:pre"> </span> <span style="white-space:pre"> </span> //如果这个位置不能摆放则,跳出这一层,因为这一层冲突,回到上一个皇后的位置再次寻找合适的位置
else dfs(q+1);
}
}
int main() {
scanf("%d", &n);
num = 0;
for(int i = 0; i < n; i++) { //第一行可以摆放的位置 横坐标的所有情况就有了
x[0] = i; // 第一个皇后的位置
dfs(1);
}
return 0;
}