N皇后问题,我们在解决N皇后问题的时候,采用搜索的方法,dg记录的是左对角线的截距,udg记录的是右对角线的截距。之后便可以进行dfs进行求解了
#include <iostream>
using namespace std;
#define N 20
int n;
bool col[N], dg[N], udg[N];
char g[N][N];
void dfs(int u) {
if(u == n) {
for(int i = 0; i < n; i++) puts(g[i]);
putchar('\n');
}
for(int i = 0; i < n; i++) {
if(!col[i] && !dg[u + i] && !udg[u - i + n]) {
g[u][i] = 'g';
col[i] = dg[u + i] = udg[u - i + n] = true;
dfs(u + 1);
col[i] = dg[u + i] = udg[u - i + n] = false;
g[u][i] = '.';
}
}
}
int main() {
scanf("%d", &n);
for(int i = 0; i < n; i++)
for(int j = 0; j < n; j++)
g[i][j] = '.';
dfs(0);
return 0;
}