[LeetCode] 52. N-Queens II

来源:互联网 发布:淘宝跳失率多少正常 编辑:程序博客网 时间:2024/05/18 12:34

思路:
维护三个数组, 分别记录同列, 左上对角线, 右上对角线是否有Queen, 对角线数组要2n长, 这样就能装下所有col + row的可能, 比较方便. 主要算法依然是DFS, 很标准.

void dfs(int& res, int row, int& n, vector<bool>& colCheck,            vector<bool>& leftDiagCheck, vector<bool>& rightDiagCheck) {    if (row == n) {        res++;        return;    }    for (int col = 0; col < n; col++) {        int leftDiag = col - row + n;        int rightDiag = col + row;        if (colCheck[col] || leftDiagCheck[leftDiag] || rightDiagCheck[rightDiag])            continue;        colCheck[col] = leftDiagCheck[leftDiag] = rightDiagCheck[rightDiag] = true;        dfs(res, row + 1, n, colCheck, leftDiagCheck, rightDiagCheck);        colCheck[col] = leftDiagCheck[leftDiag] = rightDiagCheck[rightDiag] = false;    }}int totalNQueens(int n) {    int res = 0;    vector<bool> colCheck(n);    vector<bool> leftDiagCheck(2 * n);    vector<bool> rightDiagCheck(2 * n);    dfs(res, 0, n, colCheck, leftDiagCheck, rightDiagCheck);    return res;}
0 0
原创粉丝点击