题目:
The n-queens puzzle is the problem of placing n queens on an n×n chessboard such that no two queens attack each other.
Given an integer n, return the number of distinct solutions to the n-queens puzzle.
Example:
Input: 4 Output: 2 Explanation: There are two distinct solutions to the 4-queens puzzle as shown below. [ [".Q..", // Solution 1 "...Q", "Q...", "..Q."], ["..Q.", // Solution 2 "Q...", "...Q", ".Q.."] ]
这题与上题相似,返回的是个数,不必返回所有排列字符串,依然采用DFS
class Solution {
public:
int cnt;
bool validQueen(vector<pair<int,int> > &queenPos, int x, int y)
{
for(auto e: queenPos)
{
int px = e.first;
int py = e.second;
if(px == x || py == y || abs(px - x) == abs(py - y))
return false;
}
return true;
}
void dfsQueen(vector<pair<int,int> > &queenPos,int row,int n)
{
if(row >= n)
{
if(row == n)
cnt++;
return;
}
for(int j = 0; j < n; j++)
{
if(validQueen(queenPos,row,j))
{
queenPos.push_back(make_pair(row,j));
dfsQueen(queenPos,row + 1, n);
queenPos.pop_back();
}
}
}
int totalNQueens(int n) {
cnt = 0;
vector<pair<int,int> > queenPos;
dfsQueen(queenPos,0,n);
return cnt;
}
};