n皇后问题c++代码
#include<bits/stdc++.h>
using namespace std;
const int N=11;
char q[N][N];
bool dg[N*2],udg[N*2],cor[N];//点对应的两个斜线以及列上是否有皇后
int n;
void dfs(int r){
if(r==n){//放满了棋牌,输出棋盘
for(int i=0;i<n;i++){
for(int j=0;j<n;j++)
cout<<q[i][j];
cout<<endl;
}
cout<<endl;
return;
}
for(int i=0;i<n;i++){
if(!cor[i]&&!dg[i+r]&&udg[n-i+r]){//不冲突,放皇后
q[r][i]='Q';
cor[i]=dg[i+r]=udg[n-i+r]=1;//对应的列,斜线状态改变
dfs(r+1);//处理下一行
cor[i]=dg[i+r]=udg[n-i+r]=0;//恢复现场
q[r][i]='.';
}
}
}
int main(){
cin>>n;
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
q[i][j]='.';
}
}
dfs(0);
return 0;
}