代码如下:
#include<bits/stdc++.h>
using namespace std;
int a[1005][1005],n,cnt;
bool f(int x1,int y1){
for(int i=1;i<=n;i++){
if(a[x1][i]==1||a[i][y1]==1){
return 0;
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if((i-j==x1-y1&&a[i][j]==1)||(i+j==x1+y1&&a[i][j]==1)){
return 0;
}
}
}
return 1;
}
void dfs(int x){
if(x>n){
cnt++;
if(cnt<=3){
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if(a[i][j])
cout<<j<<" ";
}
}cout<<endl;
}
return;
}
for(int i=1;i<=n;i++){
if(f(x,i)){
a[x][i]=1;
dfs(x+1);
a[x][i]=0;
}
}
}
int main(){
cin>>n;
dfs(1);
cout<<cnt;
return 0;
}