天天看点

LeetCode--N-Queens II

Follow up for N-Queens problem.

Now, instead outputting board configurations, return the total number of distinct solutions.

LeetCode--N-Queens II

思路:回溯法。由于不用放置整个棋盘上的元素,所以类似数独那一题,只用判断列和两个对角线是否可以放置即可。还是深度优先搜索,逐行逐列的放置,当最后一行也可以放置时计数加1。

class Solution {
public:
    int totalNQueens(int n) {
        vector<bool>col(n,true);
        vector<bool>main(*n-,true);
        vector<bool>anti(*n-,true);
        int count=;
        dfs(,count,n,col,main,anti);
        return count;
    }
    void dfs(int i,int &count,int n,vector<bool>&col,vector<bool>&main,vector<bool>&anti){
        if(i==n){
            count++;
            return;
        }
        for(int j=;j<n;j++){
            if(col[j]&&main[i+j]&&anti[i+n--j]){
                col[j]=main[i+j]=anti[i+n--j]=false;
                dfs(i+,count,n,col,main,anti);
                col[j]=main[i+j]=anti[i+n--j]=true;
            }
        }
    }
};