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;
}