less than 1 minute read

<-H 52> N-Queens II

class Solution {

private:
    vector<int> columns;
    vector<int> main_diag;
    vector<int> anti_diag;
    int ans_count;

    void dfs(vector<int> &count, int row) {
        const int num = count.size();
        if(row == num) {
            this->ans_count++;
            return;
        }

        for(int j = 0; j < num; j++) {
            bool ok = columns[j] == 0 && main_diag[row + j] == 0 &&
                anti_diag[row - j + num] == 0;

            if(!ok)
                continue;
            count[row] = j;
            columns[j] = main_diag[row + j] = anti_diag[row - j + num] = 1;
            dfs(count, row + 1);

            count[row] = 0;
            columns[j] = main_diag[row + j] = anti_diag[row - j + num] = 0;
        }
    }
public:
    int totalNQueens(int n) {
        this->columns = vector<int> (n, 0);
        this->main_diag = vector<int> (2 * n, 0);
        this->anti_diag  = vector<int> (2 * n, 0);
        this->ans_count = 0;

        vector<int> count(n, 0);
        dfs(count, 0);
        return this->ans_count;
    }
};