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