AcWing 843. n-皇后问题
原题链接
中等
作者:
图南_11
,
2024-11-14 16:23:24
,
所有人可见
,
阅读 1
- 关键在y=x+b 和 y= -x+b 来确定主对角线和副角线
#include<iostream>
using namespace std;
const int MAXN = 10;
int map[MAXN][MAXN];
bool col[MAXN],dg[MAXN*2],udg[MAXN*2];
int n;
void print(){
for(int i = 1;i<=n;i++){
for(int j = 1;j<=n;j++){
map[i][j]? cout<<"Q":cout<<".";
}
cout<<endl;
}
}
void dfs(int step){
if(step == n+1){
print();
cout<<endl;
}else{
for(int i = 1;i<=n;i++){
if(col[i] == 0 && dg[step-i+n] == 0 && udg[step+i]==0){
col[i] = dg[step-i+n] = udg[step+i] = 1;
map[step][i] = 1;
dfs(step+1);
map[step][i] = 0;
col[i] = dg[step-i+n] = udg[step+i] = 0;
}
}
}
}
int main(){
cin>>n;
for(int i = 0;i<=n;i++){
for(int j = 0;j<=n;j++){
map[i][j] = 0;
}
}
dfs(1);
}