本题的思想和 N皇后 https://blog.csdn.net/Jeff_Winger/article/details/82024447完全一致。代码如下:
class Solution {
public:
int totalNQueens(int n) {
int* posQ=new int [n]; //posOfQueen[i]表示i行皇后的位置(所在的列)
int count=0;
dfs(posQ,0,n,count);//从第一行开始
delete [] posQ;
return count;
}
void dfs(int* posQ,int row,int n,int& count)
{
if(row==n){//已经找到了一种放置方法
++count;
return;
}
for(int col=0;col<n;col++){
if(valid(posQ,row,col)){
posQ[row]=col;
dfs(posQ,row+1,n,count); //进行下一行的搜索,保证每行只有一个'Q'
posQ[row]=-1;
}
}
}
bool valid(int* posQ,int row,int col)
{
for(int i=0;i<row;i++){//是否还有其他皇后
if(posQ[i]==col||abs(row-i)==abs(col-posQ[i])){//前面的部分表示同一列是否有皇后,后面的部分表示对角线上的位置是否还有皇后
return false;
}
}
return true;
}
};