【题目】
Follow up for N-Queens problem.
Now, instead outputting board configurations, return the total number of distinct solutions.
【题意】
解N皇后问题,N-Queens要求返回所有的解,而本题只需要返回可行解的数目
【思路】
DFS,参考N-Queens
【代码】
class Solution {
public:
bool isValid(vector<string>matrix, int x, int y, int n){
//所在列
int i=0, j=y;
for(;i<n;i++){
if(i!=x&&matrix[i][j]=='Q')return false;
}
//指向左上角的斜线
i=x-1;
j=y-1;
while(i>=0&&j>=0){
if(matrix[i][j]=='Q')return false;
i--;j--;
}
//指向右上角的斜线
i=x-1;
j=y+1;
while(i>=0&&j<n){
if(matrix[i][j]=='Q')return false;
i--;j++;
}
return true;
}
void dfs(int&result, vector<string>matrix, int lineNo, int n){
if(lineNo>n){
result++;
return;
}
for(int i=0; i<n; i++){
matrix[lineNo-1][i]='Q';
if(isValid(matrix, lineNo-1, i, n)){
dfs(result, matrix, lineNo+1, n);
}
matrix[lineNo-1][i]='.';
}
}
int totalNQueens(int n) {
int result=0;
vector<string>matrix(n, string(n,'.'));
dfs(result, matrix, 1, n);
return result;
}
};