lintcode-N皇后问题II

n皇后问题是将n个皇后放置在n*n的棋盘上,皇后彼此之间不能相互攻击。

给定一个整数n,求n皇后问题的有多少种解决方案


class Solution {
    void search(vector<int> &c,int n,int cur,int &ret){
        if(cur==n){
            ++ret;
            return;
        }
        for(int i=0;i<n;++i){           //cur表示当前行,i表示要选择的列
            if(isValid(c,cur,i)){       //检验当前列是否合法
                c[cur]=i;               //合法的话就摆放吧
                search(c,n,cur+1,ret);  //搜寻下一行
            }
        }    
    }
    bool isValid(vector<int> &c,int row,int col){
        for(int i=0;i<row;++i)
            if(c[i]==col||i-c[i]==row-col||i+c[i]==row+col) //分别检查纵向,主对角线,副对角线上是否有其他皇后
                return false;                               //因为是一行一行摆放,所以不用检查同一行
        return true;        
    }
public:
    
    int totalNQueens(int n) {
        if(n<=0)
            return 0;
        vector<int> c(n);
        int ret=0;
        search(c,n,0,ret);
        return ret;
    }
};


你可能感兴趣的:(lintcode-N皇后问题II)