AcWing 843. n-皇后问题
原题链接
中等
作者:
云里雾里
,
2021-06-02 23:07:05
,
所有人可见
,
阅读 255
//此种情况为每行只放一个皇后
#include<iostream>
using namespace std;
const int N = 20;
int col[N],dg[N],udg[N];//col代表本列有没有皇后 dg表示对角线有没有皇后 udg表示反对角线有没有皇后
int n;
char g[N][N];
void dfs(int m)
{
if(m == n)
{
for(int i = 0;i < n;i++)
printf("%s\n",g[i]);
puts("");
return;
}
for(int i = 0;i < n;i++)
{
if(!col[i]&&!dg[m + i]&&!udg[m - i + n]) //加偏移量的原因是为了防止数组出现负数
{
g[m][i] = 'Q';
col[i] = dg[m + i] = udg[m - i + n] = 1;
dfs(m + 1);
col[i] = dg[m + i] = udg[m - i + n] = 0;
g[m][i] = '.';
}
}
return;
}
int main()
{
cin >> n;
for(int i = 0;i < n;i++)
for(int j = 0;j < n;j++)
g[i][j] = '.';
dfs(0);
return 0;
}