LeetCode--N-Queens II

来源:互联网 发布:眼镜软件 lms 编辑:程序博客网 时间:2024/05/21 07:18

Follow up for N-Queens problem.

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

这里写图片描述

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

class Solution {public:    int totalNQueens(int n) {        vector<bool>col(n,true);        vector<bool>main(2*n-1,true);        vector<bool>anti(2*n-1,true);        int count=0;        dfs(0,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=0;j<n;j++){            if(col[j]&&main[i+j]&&anti[i+n-1-j]){                col[j]=main[i+j]=anti[i+n-1-j]=false;                dfs(i+1,count,n,col,main,anti);                col[j]=main[i+j]=anti[i+n-1-j]=true;            }        }    }};