843. n-皇后问题
作者:
闪回
,
2024-03-27 08:33:38
,
所有人可见
,
阅读 3
核心搜索顺序就是枚举每个位置放/不放
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
typedef long long LL;
const int N = 10;
int row[N],col[N],dg[N*2],udg[N*2];
int n;
char g[N][N];
void dfs(int x,int y,int sum)
{
if(y == n)x++,y = 0;
if(x == n)
{
if(sum == n)
{
for (int i = 0; i < n; i ++ )puts(g[i]);
puts("");
}
return;
}
//不放
dfs(x,y+1,sum);
//放
if(!row[x] && !col[y] && !dg[y-x+n] && !udg[x+y])
{
row[x] = col[y] = dg[y-x+n] = udg[x+y] = true;
g[x][y] = 'Q';
dfs(x,y+1,sum+1);
g[x][y] = '.';
row[x] = col[y] = dg[y-x+n] = udg[x+y] = false;
}
}
int main()
{
cin>>n;
for(int i = 0;i<n;i++)
{
for(int j = 0;j<n;j++)g[i][j] = '.';
}
dfs(0,0,0);
return 0;
}