现在的位置: 首页 > 综合 > 正文

N-Queens II

2018年04月01日 ⁄ 综合 ⁄ 共 872字 ⁄ 字号 评论关闭

Follow up for N-Queens problem.

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

思路:II比I简单,只需在I的基础上不打印计数即可。
class Solution {
private:
    vector<bool> used;
    vector<vector<bool> > queen;
    int total;
public:  
    bool isAdj(int row, int col)
    {
        int n = queen.size();
        int i,j;
        i = row-1, j = col - 1;
        while(i>=0 && j>=0)
        {
            if (queen[i][j])
            {
                return true;
            }    
            i--,j--;
        }
        i = row - 1, j = col + 1;
        while(i>=0 && j<n)
        {
            if (queen[i][j])
            {
                return true;
            }    
            i--,j++;
        }                
        return false; 
    }      
    void solveNQueensHelper(int pos,int n)
    {
        if (pos == n)
        {
            total++;   
            return;
        }    
        int i;
        for(i=0; i<n; ++i)
        {
            if (!used[i] && !isAdj(pos,i))
            {
                used[i] = true;
                queen[pos][i] = true;
                solveNQueensHelper(pos+1,n);
                used[i] = false;
                queen[pos][i] = false;
            }    
        }    
    }    
    int totalNQueens(int n) {
        used.clear();
        queen.clear();
        total = 0;
        if (n <= 0)
        {
            return total;
        }   
        used.resize(n);
        queen.resize(n);
        int i,j;
        for(i=0; i<n; ++i)
        {
            used[i] = false;
            queen[i].resize(n);
            for(j=0; j<n; ++j)
            {
                queen[i][j] = false;
            }    
        }   
        solveNQueensHelper(0,n);    
        return total;
    }
};

抱歉!评论已关闭.