https://leetcode.com/problems/n-queens/
比较容易的hard
DFS
判断条件有点失误 哎DFS 写的有点慢啊
class Solution {
public:
vector< vector<string> > solveNQueens(int n) {
vector < vector <string> > ret;
if(n == 0) return ret;
vector <int> svec;
for(int i=0;i<n;i++) {
vis[i] = 0;
}
dfs( ret, svec, 0 , n );
return ret;
}
void dfs(vector < vector<string> > &ret, vector<int> ivec, int dep , int n ) {
if(dep >n ) return;
if(ivec.size() == n) {
vector <string> ans;
for( int i=0; i< ivec.size(); i++ ) {
string tmp(n, '.');
tmp[ ivec[i] ] = 'Q';
ans.push_back(tmp);
}
ret.push_back(ans);
return ;
}
for(int i=0;i<n;i++) {
if(vis[i]) continue;
int flag = 1;
for(int j=0;j<dep;j++) {
if( dep-j==i-ivec[j] || dep-j== ivec[j]-i ) {
flag = 0;
break;
}
}
if(flag) {
vis[i] = 1;
vector <int> tmp(ivec);
tmp.push_back(i);
dfs(ret, tmp, dep+1, n);
vis[i] = 0;
}
}
}
private:
int vis[10001];
};