这里的主对角线和副对角线画反了,斯密马赛
#include<iostream>
using namespace std;//N皇后问题,两两皇后不能出现在同一行,列,对角线上
const int N=20;
int col[N],dia[N],udia[N];//用col[i],dia[i],udia[i]数组分别存储第i列,第i条正对角线,第i条副对角线
// 是否存在皇后
//因为我们dfs深搜是按行来搜索的,所以行不会冲突,就不用在开一个row数组
char grid[N][N];//地图
int n;
void dfs(int u)
{
if(u==n)//当搜索到最后一行打印答案
{
for(int i=0;i<n;++i)
{
printf("%s",grid[i]);
if(i!=n-1)printf("\n");
}
cout<<endl<<" "<<endl;
return ;
}
for(int j=0;j<n;++j)
if(!col[j]&&!dia[u+j]&&!udia[u-j+n])//两个对角线和列上均没有皇后
{
grid[u][j]='Q';
col[j]=dia[u+j]=udia[u-j+n]=1;
dfs(u+1);
col[j]=dia[u+j]=udia[u-j+n]=0;
grid[u][j]='.';
}
}
int main()
{
cin>>n;
for(int i=0;i<n;++i)
for(int j=0;j<n;++j)
grid[i][j]='.';
dfs(0);
return 0;
}