8个皇后问题
dfs+回溯方法
class Solution {
public:
vector<vector<string> > solveNQueens(int n) {
vector<vector<string> > res;
vector<int> coloccupid(n,-1);
vector<string> temp;
if(n<1){
return res;
}
sove(0,n,temp,res,coloccupid);
return res;
}
void sove(int row,int n,vector<string> temp,vector<vector<string> > &res,vector<int> &coloccupid){
//row 表示第几行 摆放 coloccupid 表示第row 第 i列被占用
if(row==n){
res.push_back(temp);
return ;
}
for(int i=0;i<n;i++){ // i 现在表示的是列
string s(n,'.');
s[i]='Q';
coloccupid[row]=i; //第row 第i列被占用
temp.push_back(s);
if(isvalid(coloccupid,row,i)){
sove(row+1,n,temp,res,coloccupid);
}
temp.pop_back();
coloccupid[row]=-1;
}
}
bool isvalid(vector<int> &coloccupid, int row,int j){
for(int i=0;i<row;i++){
if(coloccupid[i]==j || abs(row-i)==abs(coloccupid[i]-j)){ //在同一列 或者斜线上
return false;
}
}
return true;
}
};