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();
    }
};

Supongo que te gusta

Origin blog.csdn.net/m0_61028090/article/details/132789334
Recomendado
Clasificación