LeetCode OJ--N-Queens II

https://oj.leetcode.com/problems/n-queens-ii/

N皇后问题,计算解的个数

class Solution {
public:
    int totalNQueens(int n) {
        if(n<=0)
            return 0;

        vector<int> places(n,-1);
        
        int ans = 0;
        
        placeQueen(0, n, ans, places);
        
        return ans;
    }
    
    // col and lines
    bool valid(int i, int j, vector<int> &places)
    {
        for(int p = 0; p<i; p++)
        {
            if(places[p] == j || abs(i - p) == abs(places[p] - j))
                return false;
        }
        return true;
    }
    
    void placeQueen(int i, int n, int &ans, vector<int> &places)
    {
        // one solution
        if(i == n)
        {
            ans++;
        }
        
        for(int col = 0; col < n; col++)
        {
            if(valid(i,col,places))
            {
                places[i] = col;
                placeQueen(i+1,n,ans,places); // next queue, next line
            }
        }
    }
};


 
原文地址:https://www.cnblogs.com/qingcheng/p/3876479.html