题目链接 leetcode
题目描述 按照国际象棋的规则,皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。n 皇后问题 研究的是如何将 n
个皇后放置在 n×n
的棋盘上,并且使皇后彼此之间不能相互攻击。 给你一个整数 n
,返回所有不同的 n 皇后问题 的解决方案。 每一种解法包含一个不同的 n 皇后问题 的棋子放置方案,该方案中 'Q'
和 '.'
分别代表了皇后和空位。
C++ 代码 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 #include <iostream> #include <vector> using namespace std;class Solution_0 {public : vector<vector<string>> solveNQueens (int n) { res.clear (); n = _n; col = vector <bool >(n); dg = udg = vector <bool >(n*2 ); path = vector <string>(n, string (n, '.' )); backtrack (0 ); return res; } void backtrack (int row) { if (row == path.size ()) { res.push_back (path); return ; } for (int col = 0 ; col < path.size (); col++) { if (isValid (path, row, col)) { path[row][col] = 'Q' ; backtrack (row + 1 ); path[row][col] = '.' ; } } } bool isValid (vector<string> path, int row, int col) { for (int i = 0 ; i < row; i++) { if (path[i][col] == 'Q' ) { return false ; } } for (int i = row-1 , j = col-1 ; i >= 0 && j >= 0 ; i--, j--) { if (path[i][j] == 'Q' ) { return false ; } } for (int i = row-1 , j = col+1 ; i >= 0 && j < path.size (); i--, j++) { if (path[i][j] == 'Q' ) { return false ; } } return true ; }private : vector<vector<string>> res; vector<string> path; };void printArray (const vector<vector<string>>& nums) { cout << "[" ; for (size_t i = 0 ; i < nums.size (); i++) { cout << "[" ; for (size_t j = 0 ; j < nums[i].size (); j++) { cout << "\"" << nums[i][j] << "\"" ; if (j != nums[i].size () - 1 ) cout << "," ; } cout << "]" ; if (i != nums.size () - 1 ) cout << "," ; } cout << "]" << endl; }int main () { Solution solution; vector<int > n_cases = { 4 , 1 }; for (size_t i = 0 ; i < n_cases.size (); i++) { int n = n_cases[i]; cout << "Input: n = " << n << endl; vector<vector<string>> result = solution.solveNQueens (n); cout << "Output: " ; printArray (result); } return 0 ; }