题目描述
blablabla
#include<stdio.h>
#include<stdbool.h>
#include<math.h>
#define N 10
int n; //n皇后的个数
int x[N]; //当前解
bool place(int k){ //剪枝 判断递归当第k个数是否符合
for(int j = 1; j < k; j++){
if(abs(k-j) == abs(x[j] - x[k]) || (x[j] == x[k])) //不在同一行是肯定的 不在同一列判断是x[j]=x[k]
return false; //不在同一对角线就是 斜率绝对值不为1
}
return true;
}
void backtrack(int k){
if(k > n){
for(int i = 1; i <=n; i++){
int k = x[i];
for(int j = 1; j <= n; j++){
if(j == k) printf("Q");
else printf(".");
}
printf("\n");
}
printf("\n");
}
else{
for(int i = 1; i <= n; i++){
x[k] = i;
if(place(k)) backtrack(k+1);
}
}
}
int main(){
scanf("%d", &n);
backtrack(1);
return 0;
}