我写的时候参考的代码:https://blog.csdn.net/s2013122867/article/details/50310405
#include<iostream>
#include<cstdio>
#include<string>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
int chessBoard[8][8];
int white[8];
int black[8];
int sum =0;
int n;
int blackQueen(int k){
for(int i=0;i<k-1;i++){
if(black[i]==black[k-1]||(fabs(k-1-i)==fabs(black[k-1]-black[i])))
return 0;
}
if(k==n){
sum++;
return 0;
}
for(int j=0;j<n;j++){
if(chessBoard[k][j]&&white[k]!=j){
black[k]=j;
blackQueen(k+1);
}
}
}
int whiteQueen(int k){
for(int i=0;i<k-1;i++){
if(white[i]==white[k-1]||(fabs(k-1-i)==fabs(white[k-1]-white[i])))
return 0;
}
if(k==n){
blackQueen(0);
return 0;
}
for(int j=0;j<n;j++){
if(chessBoard[k][j]){
white[k]=j;
whiteQueen(k+1);
}
}
}
int main(){
scanf("%d",&n);
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
scanf("%d",&chessBoard[i][j]);
}
}
whiteQueen(0);
printf("%d\n",sum);
return 0;
}