N-Queens II

Follow up for N-Queens problem.

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

思路:这是N-Queens的变形,只需要输出所有八皇后的个数。思路和N-Queens差不多,只是不用存八皇后的排列了。所以在判断条件下,如果为真,则直接加1.如果不是,则不加。

class Solution {
public:
    bool check(vector<int> &data,int n)
    {
        for(int i=0;i<n;i++)
        {
            for(int j=i+1;j<n;j++)
            {
                if(j-i==abs(data[j]-data[i]))
                {
                    return false;
                }
            }
        }
        return true;
    }
    void Permutation(vector<int> &data,int n,int pBegin,int &count)
    {
        if(pBegin==n)
        {
            if(check(data,n)==true)
            {
                count++;
            }
        }
        else
        {
            for(int i=pBegin;i<n;i++)
            {
                swap(data[pBegin],data[i]);
                Permutation(data,n,pBegin+1,count);
                swap(data[pBegin],data[i]);
            }
        }
    }
    void Permutation(int n,int &count)
    {
        vector<int> data;
        for(int i=0;i<n;i++)
        {
            data.push_back(i);
        }
        Permutation(data,n,0,count);
    }
    int totalNQueens(int n) {
        int count=0;
        Permutation(n,count);
        return count;
    }
};
原文地址:https://www.cnblogs.com/awy-blog/p/3644908.html