leetcode 52. N 皇后 II

2023.9.10

        本题是皇后问题的变式,让求出不同解决方案的数量,和之前做过的 N皇后 基本一样,最终返回ans里棋盘的数量即可。  

        当复习一下皇后问题了,代码如下:

class Solution {
private:
    vector<vector<string>> ans;
    //判断当前皇后落点是否合理
    bool is_valid(vector<string>&chessboard,int row,int col,int n)
    {
        //正上方
        for(int i=row-1; i>=0; i--)
        {
            if(chessboard[i][col] == 'Q') return false;
        }
        //左上方
        for(int i=row-1,j=col-1; i>=0&&j>=0; i--,j--)
        {
            if(chessboard[i][j] == 'Q') return false;
        }
        //右上方
        for(int i=row-1,j=col+1; i>=0&&j<n; i--,j++)
        {
            if(chessboard[i][j] == 'Q') return false;
        }
        return true;
    }
    void backtrack(vector<string>&chessboard,int row,int n)
    {
        if(row == n)
        {
            ans.push_back(chessboard);
            return;
        }
        for(int col=0; col<n; col++)
        {
            if(is_valid(chessboard,row,col,n))
            {
                chessboard[row][col] = 'Q';
                backtrack(chessboard,row+1,n);
                chessboard[row][col] = '.';
            }
        }
    }
public:
    int totalNQueens(int n) {
        vector<string> chessboard(n,string(n,'.'));
        backtrack(chessboard,0,n);
        return ans.size();
    }
};

猜你喜欢

转载自blog.csdn.net/m0_61028090/article/details/132789334