题目:
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:
[ [".Q..", // Solution 1 "...Q", "Q...", "..Q."], ["..Q.", // Solution 2 "Q...", "...Q", ".Q.."] ]
题解:
class Solution { public: void dfs(vector<vector<string>>& res, vector<string>& v, int n, vector<int>& pos, int row) { if(row >= n) { res.push_back(v); return; } for(int col=0; col<n; ++col) { if (!isValid(pos, row, col)) { continue; } v[row][col] = 'Q'; pos[row] = col; dfs(res, v, n, pos, row + 1); pos[row] = -1; v[row][col] = '.'; } } bool isValid(vector<int>& pos, int row, int col) { for (int i = 0; i < row; ++i) { if (pos[i] == col || abs(row - i) == abs(col - pos[i])) { return false; } } return true; } vector<vector<string>> solveNQueens(int n) { vector<vector<string>> res; vector<string> v(n, string(n, '.')); vector<int> pos(n, -1); dfs(res, v, n, pos, 0); return res; } };