八皇后想到的就是用DFS+回溯;但是实现有点麻烦,我是卡在回溯时check数组的复原情况,一开始以为只要像create_check一样简单变0就好了,最后发现会把前面设置的1给变了(有点呆
然后想到用vector直接一个temp就好了,速度有点慢,好像只比5%左右的人快,不过总归是过了
class Solution {
public:
vector<vector<string> >res;
vector<vector<int>>check;
void create_check(vector<vector<int>>&check,int current_row,int col,int n){
for(int i=0;i<n;++i){
check[current_row][i]=1;
check[i][col]=1;
if(current_row+i<n&&col-i>=0)check[current_row+i][col-i]=1;
if(current_row-i>=0&&col+i<n)check[current_row-i][col+i]=1;
if(current_row+i<n&&col+i<n)check[current_row+i][col+i]=1;
if(current_row-i>=0&&col-i>=0)check[current_row-i][col-i]=1;
}
}
void make_queens(vector<string> &board,int current_row,int n){
if(current_row==n){
res.push_back(board);
return;
}
for(int i=0;i<n;++i){
if(check[current_row][i]==0){
vector<vector<int>>temp=check;
create_check(check,current_row,i,n);
board[current_row][i]=\'Q\';
make_queens(board,current_row+1,n);
board[current_row][i]=\'.\';
check=temp;
}
}
return;
}
vector<vector<string> > solveNQueens(int n) {
check=vector<vector<int>>(50,vector<int>(50,0));
vector<string>board(n,string(n,\'.\'));
make_queens(board,0,n);
return res;
}
};
版权声明
本文仅代表作者观点,不代表百度立场。
本文系作者授权百度百家发表,未经许可,不得转载。



