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.
For example,
There exist two distinct solutions to the 4-queens puzzle:
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: bool isOK(vector<int> &vec, int index) { int size = vec.size(); if(0 == size) return true; for(int i=0;i<size;i++) { if(vec[i] == index) return false; if(abs(index - vec[i])==size-i) return false; } return true; } void solve(vector<vector<string>> &res, vector<int> &vec, int n) { if(vec.size() == n) { vector<string> temp(n,string(n,'.')); for(int i=0;i<n;i++)temp[i][vec[i]]='Q'; res.push_back(temp); return; } for(int i=0; i<n;i++) { if(!isOK(vec,i)) continue; vec.push_back(i); solve(res, vec, n); vec.pop_back(); } } vector<vector<string> > solveNQueens(int n) { vector<vector<string> > res; vector<int> vec; solve(res, vec, n); return res; } };