Follow up for N-Queens problem.
Now, instead outputting board configurations, return the total number of distinct solutions.
题意:
依然是N皇后问题,只不过在上次的八皇后问题中,是需要输出每个棋盘的布局的,而这一题只需要输出所有的解的数目即可。
解法:
同上一次的回溯法,非递归实现。代码部分也是将上次保存输出棋盘的部分改成直接计数就可。
代码:
<span style="font-size:14px;">class Solution {
public:
int mmin=-100000;
bool valid(int i, int j, int a[], int n){
for(int r=0; r<n; r++){
if(a[r]==j || abs(r-i)==abs(a[r]-j)){
return false;
}
}
return true;
}
int totalNQueens(int n) {
int count=0;
int a[n];
for(int i=0; i<n; i++)
a[i]=mmin;
int i=0, j=0;
while(i<n){
while(j<n){
if(valid(i, j, a, n)==true){
a[i]=j;
j=0;
break;
}
else{
j++;
}
}
if(a[i]==mmin){
if(i==0) break;
else{
i--;
j=a[i]+1;
a[i]=mmin;
continue;
}
}
if(i==n-1){
count++;
j=a[i]+1;
a[i]=mmin;
continue;
}
i++;
}
return count;
}
};</span>