N 皇后问题是指在 n * n 的棋盘上要摆 n 个皇后,
要求:任何两个皇后不同行
,不同列
也不在同一条斜线
上,
求给一个整数 n ,返回 n 皇后的摆法数。
数据范围: 1 ≤ n ≤ 9
#include <iostream> #include <cstring> #include <algorithm> using namespace std; const int N = 20; int n; char map[N][N]; bool col[N], dg[N], udg[N]; void dfs(int x){ if (x == n + 1){ for(int i = 1; i <= n;i++){ for (int j = 1; j <= n; j ++ ) printf("%c", map[i][j]); puts(""); } puts(""); } for(int i = 1; i <= n;i++){ if (!col[i] && !dg[n - x + i] && !udg[x + i]){ col[i] = dg[n - x + i] = udg[x + i] = true; map[x][i] = 'Q'; dfs(x + 1); col[i] = dg[n - x + i] = udg[x + i] = false; map[x][i] = '.'; } } } int main(){ scanf("%d", &n); for (int i = 1; i <= n; i ++ ) for (int j = 1; j <= n; j ++ ) map[i][j] = '.'; dfs(1); return 0; }
标签:char,摆法,int,dfs,问题,皇后,include From: https://www.cnblogs.com/xyfmFocus/p/17909413.html