题目链接:N皇后
按字典序算N皇后的前三组数据和总共多少组数据,直接按照N皇后去搜就可以了
#include <bits/stdc++.h>
using namespace std;
int n,ind,ans[100005][15],cs;
bool row[15],dia1[100005],dia2[100005];
void dfs(int q){
if(q > cs){
ind++;
for(int i = 1;i <= cs;i++)
ans[ind][i] = ans[ind-1][i];
return ;
}
for(int r = 1;r <= cs;r++){
if(row[r]&&dia1[r+q]&&dia2[cs-q+r]){
row[r] = dia1[r+q] = dia2[cs-q+r]=false;
ans[ind][q] = r;
dfs(q+1);
row[r] = dia1[r+q] = dia2[cs-q+r]=true;
}
}
}
int main(){
memset(row,true,sizeof(row));
memset(dia1,true,sizeof(dia1));
memset(dia2,true,sizeof(dia2));
ind = 1;
cin>>cs;
dfs(1);
for(int n = 1;n <= 3;n++){
for(int i = 1;i < cs;i++)
cout<<ans[n][i]<<" ";
cout<<ans[n][cs]<<endl;
}
cout<<ind-1<<endl;
return 0;
}