N皇后问题

image-20250210101936799

const int N = 15;
class Solution {
public:
    int ans = 0;
    int d1[N][N];
    bool check(int x,int y,int n) {
        for (int i = 0;i < x;i++) {
            if (d1[i][y] == 1) {
                return false;
            }
        }
        int k = min(x,y);
        for (int i = 1;i <= k;i++) {
            if (d1[x-i][y-i] == 1) {
                return false;
            }
        }
        k = min(x,n-y-1);
        for (int i = 1;i <= k;i++) {
            if (d1[x-i][y+i] == 1) {
                return false;
            }
        }
        return true;
    }
    void dfs(int x,int n) {
        if (x == n) {
            ans++;
            return ;
        }
        for (int i = 0;i < n;i++) {
            if (check(x,i,n)) {
                d1[x][i] = 1;
                dfs(x+1,n);
                d1[x][i] = 0;
            }
        }
    }
    int totalNQueens(int n) {
        dfs(0,n);
        return ans;
    }
};