题目:
代码:
#include <bits/stdc++.h>
using namespace std;
int n;//n*n的矩阵
bool lie[15];//lie[i]=1代表第i列有皇后
bool zd[30];//zd[i]=1代表第i条对角线被占领
bool fd[30];//fd[i]=1代表第i条副对角线被占领
int queen[30];//queen[i]=k代表第i行皇后放第k列
int cnt=0;
void s(int x){
if(x==n+1){
cnt++;
cout<<"No."<<cnt<<endl;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if(queen[i]==j){
cout<<1;
}
else cout<<0;
}
cout<<endl;
}
}
for(int i=1;i<=n;i++){
//判断第i列是否能放皇后
if(!lie[i]&&!zd[x-i+n]&&!fd[x+i]){
queen[x]=i;
lie[i]=1;
zd[x-i+n]=1;
fd[x+i]=1;
s(x+1);
lie[i]=0;
zd[x-i+n]=0;
fd[x+i]=0;
}
}
}
int main(){
cin>>n;
s(1);
if(cnt==0){
cout<<"NO";
}
return 0;
}