原题链接
n-皇后问题其实是二维的排列数组问题,需要考虑对角线,其他的与一维类似
一维链接
#include<iostream>
using namespace std;
const int N = 20;
//因为bool类型的对角线数组可能出现负数,需要通过加上一个n来使其为正,所以需要多开一倍
int n;
char g[N][N];
bool col[N],dg[N],udg[N];
void dfs(int x)//与一维做法相同
{
if(x > n)
{
for(int i = 1;i <= n;i ++)
{
for(int j = 1;j <= n;j ++)
{
cout << g[i][j];
}
puts("");
}
puts("");
}
for(int y = 1;y <= n;y ++)
{
if(!col[y] && !udg[y + x] && !dg[y - x + n])//以截距作为数组
{
g[x][y] = 'Q';
col[y] = udg[y + x] = dg[y - x + n] = true;
dfs(x + 1);
g[x][y] = '.';
col[y] = udg[y + x] = dg[y - x + n] = false;
}
}
}
int main()
{
cin >> n;
for(int i = 1;i <= n;i ++)
{
for(int j = 1;j <= n;j ++)
{
g[i][j] = '.';
}
}
dfs(1);
return 0;
}