N皇后问题

N皇后问题,我们在解决N皇后问题的时候,采用搜索的方法,dg记录的是左对角线的截距,udg记录的是右对角线的截距。之后便可以进行dfs进行求解了

#include 
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;
}

你可能感兴趣的:(N皇后问题)