he 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.
For example,
There exist two distinct solutions to the 4-queens puzzle:
[ [".Q..", // Solution 1 "...Q", "Q...", "..Q."], ["..Q.", // Solution 2 "Q...", "...Q", ".Q.."] ]class Solution { public: void solve(int n, int num, vector<bool> &RowUsed, vector<bool> &d1, vector<bool> &d2,vector<vector<string> > &r, vector<string> ss) { if(num == n)r.push_back(ss); for(int i = 0; i < n; i++) { if((!RowUsed[i])&&(!d1[i+num])&&(!d2[i-num+n-1])) { RowUsed[i] = true; d1[i+num] = true; d2[i-num+n-1] = true; ss[num][i] = 'Q'; solve(n,num+1,RowUsed,d1,d2,r,ss); RowUsed[i] = false; d1[i+num] = false; d2[i-num+n-1] = false; ss[num][i] = '.'; } } return; } vector<vector<string> > solveNQueens(int n) { vector<bool> RowUsed(n,false); vector<bool> diagonal1(2*n-1,false); vector<bool> diagonal2(2*n-1,false); string s(n,'.'); vector<string> ss(n,s); vector<vector<string> > ret; if(n < 1)return ret; solve(n,0,RowUsed,diagonal1,diagonal2,ret,ss); return ret; } };