Description:
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 all distinct solutions to the n-queens puzzle.
Each solution contains a distinct board configuration of the n-queens' placement, where 'Q' and '.' both indicate a queen and an empty space respectively.
Example:
Input: 4
Output: [
[".Q..", // Solution 1
"...Q",
"Q...",
"..Q."],
["..Q.", // Solution 2
"Q...",
"...Q",
".Q.."]
]
Explanation: There exist two distinct solutions to the 4-queens puzzle as shown above.
class Solution {
public:
vector<vector<string>> solveNQueens(int n) {
vector<vector<string>> solutions;
vector<int> data(n,-1);
sQueens(solutions,data,0,n);
return solutions;
}
void sQueens(vector<vector<string>>& solutions,vector<int>& data,int col,int n) {
if(col>=n){
vector<string> solution;
string temp="";
for (int i=0;i<n;i++){
for(int j=0;j<n;j++)
if(j==data[i])
temp+="Q";
else
temp+=".";
solution.push_back(temp);
temp="";
}
solutions.push_back(solution);
return;
}
for (int i=0;i<n;i++){
if(solve(data,i,col,n)){
data[col]=i;
sQueens(solutions,data,col+1,n);
data[col]=-1;
}
}
}
bool solve(vector<int> &data,int row,int col,int n){
for (int j=0;j<col;j++){
if (data[j]==row || abs(data[j]-row)== abs(j-col))
return false;
}
return true;
}
};