#include<iostream>
#include<cstdio>
using namespace std;
int MAP[105][105]={0};//Queen place
int ans=0,p;
void dfs(int e){
if (e>p){
ans+=1;
if (ans<=3){
for (int j=1;j<=p;j++){
for (int I=1;I<=p;I++){
if (MAP[I][j]==2) printf("%d ",I);
}
}
printf("\n");
}
return ;
}
else {
for (int i=1;i<=p;i++){
if (MAP[i][e]==0){
for (int j=1;j<=p;j++){
MAP[j][e]=1;//行占领
MAP[i][j]=1;//列占领
if (1<=j<=p&&1<=i+e-j<=p) MAP[j][i+e-j]=1;//右斜占领
if (1<=e-j&&1<=i-j) MAP[i-j][e-j]=1;//左斜占领
if (e+j<=p&&i+j<=p) MAP[i+j][e+j]=1;//左斜占领
}
MAP[i][e]=2;
dfs(e+1);
for (int j=1;j<=p;j++){
MAP[i][j]=0;
MAP[j][e]=0;
if (1<=j<=p&&1<=i+e-j<=p) MAP[j][i+e-j]=0;
if (1<=e-j&&1<=i-j) MAP[i-j][e-j]=0;
if (e+j<=p&&i+j<=p) MAP[i+j][e+j]=0;
}
MAP[i][e]=0;
}
}
}
}
int main(){
scanf("%d",&p);
dfs(1);
printf("%d",ans);
}
应该是else里面标记的环节错了 错在哪了?