Follow up for N-Queens problem.
Now, instead outputting board configurations, return the total number of distinct solutions.
题意:对于一个n皇后问题,返回解的个数
解题思路:基于N-Queens,这个II版的反而更简单,记录解的个数并返回即可。
bool iv(vector<int> v,int k)//判断当前皇后是否与之前已经放好的皇后冲突,因为已经决定了1行只放一个,所以只需要判断是否在同一列以及是否在斜线即可。
{
for(int i=1;i<k;++i)
{
if(v[i]==v[k])
{
return false;
}
double xt=k-i;
double yt=v[i]-v[k];
double xy=yt/xt;//斜线的斜率为-1或1
if(xy==1||xy==-1)
{
return false;
}
}
return true;
}
void sq(int k,int n,vector<int>& v,int& num)
{
for(int j=1;j<=n;++j)
{
v[k]=j;
if(iv(v,k))
{
if(k==n)
{
num++;
}
else
{
sq(k+1,n,v,num);
}
}
else
{
v[k]=0;
}
}
}
int totalNQueens(int n) {
vector<int> v(n+1,0);
int num=0;
sq(1,n,v,num);
return num;
}