LC题解:回溯算法经典题目
N皇后问题:https://leetcode-cn.com/problems/n-queens/
/*经典回溯算法题目*/
class Solution
{
public:
vector<vector<string>>ans;
vector<vector<string>> solveNQueens(int n)
{
vector<string> board(n,string(n,'.'));
backtrack(board,0);
return ans;
}
void backtrack(vector<string>& board,int row)
{
if(row==board.size())ans.push_back(board);
for(int col=0;col<board.size();++col)
{
if(!isvalid(board,row,col))
continue;
board[row][col]='Q';
backtrack(board, row+1);
board[row][col]='.';
}
}
bool isvalid(vector<string>& board,int row,int col)
{
for(int i=0;i<row;++i)
{
if(board[i][col]=='Q')return false;
}
for(int i=row-1,j=col-1;i>=0&&j>=0;--i,--j)
{
if(board[i][j]=='Q')return false;
}
for(int i=row-1,j=col+1;i>=0&&j<board.size();--i,++j)
{
if(board[i][j]=='Q')return false;
}
return true;
}
};