问题
思路
dfs注意剪枝。恢复状态。
代码
class Solution {
public:
int totalNQueens(int n) {
vector<int> visited;
int ans = 0;
dfs( n, 0, visited, ans );
return ans;
}
private:
void dfs( int n, int cur, vector<int>& visited, int& ans ){
if( cur == n ) ++ans;
else{
for(int k = 0; k < n; ++k){
if( valid(cur, k, visited) ){
visited.push_back( k );
dfs( n, cur+1, visited, ans );
visited.pop_back();
}
}
}
}// dfs
bool valid( int x, int y, vector<int>& visited ){
int sz = visited.size();
for(int u = 0; u < sz; ++u){
int v = visited[u];
// same colume
if( y == v ) return false;
// same diag
if( abs(x-u) == abs(y-v) ) return false;
}
return true;
}// valid
};