#include<iostream>
using namespace std;
/*枚举每一行,在第几列放皇后
col[i]==true表示第i列放过皇后了*/
int cnt=1;
bool g[10][10],row[20],col[20],dg[20],udg[20];
void dfs(int x,int y,int k){//当前看到(x,y)格,并且放了k个皇后
if(y==8){
y=0;
x++;
}
if(x==8){
if(k==8){
cout<<"No."<<cnt<<endl;
for(int i=0;i<8;i++){
for(int j=0;j<8;j++){
cout<<g[i][j];
}
cout<<endl;
}
cnt++;
}
return;
}
if(row[x]==false&&col[y]==false&&dg[x+y]==false){
if(udg[8+x-y]==false){
g[x][y]=1;
row[x]=col[y]=dg[x+y]=udg[8+x-y]=true;
dfs(x,y+1,k+1);
g[x][y]=0;
row[x]=col[y]=dg[x+y]=udg[8+x-y]=false;
}
}
dfs(x,y+1,k);
}
int main(){
dfs(0,0,0);//从(0,0)开始看起
return 0;
}
qqwhale.com/problem/2971