计算不同的排列个数
思路同上
class Solution {
public:
int totalNQueens(int n) {
vector<int> queen(n,-1);
int count = 0;
scan(0, count,n,queen);
return count;
}
bool isLegal(int x, int y, vector<int> &queen){
for (int i = 0; i < x; i++){
if (queen[i] == y || (i - queen[i] == x - y) ||( i + queen[i] == x + y))
return false;
}
return true;
}
void scan(int x, int &count, int &n, vector<int> &queen){
if (x == n){
count++;
return;
}
for (int i = 0; i < n; i++){
if (isLegal(x, i,queen)){
queen[x] = i;
scan(x + 1,count,n,queen);
}
}
}
};