51.cpp 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. /*
  2. * @Description:
  3. * @Version: 1.0
  4. * @Autor: zhuyijun
  5. * @Date: 2021-11-11 22:23:35
  6. * @LastEditTime: 2021-11-11 23:05:48
  7. */
  8. #include <bits/stdc++.h>
  9. using namespace std;
  10. vector<vector<string>> res;
  11. bool isVaild(vector<string> &board, int row, int col) {
  12. int n = board.size();
  13. // 检查列
  14. for (int i = 0; i < row; i++) {
  15. if (board[i][col] == 'Q') {
  16. return false;
  17. }
  18. }
  19. // 检查 45度角是否有皇后
  20. for (int i = row - 1, j = col - 1; i >= 0 && j >= 0; i--, j--) {
  21. if (board[i][j] == 'Q') {
  22. return false;
  23. }
  24. }
  25. // 检查 135度角是否有皇后
  26. for (int i = row - 1, j = col + 1; i >= 0 && j < n; i--, j++) {
  27. if (board[i][j] == 'Q') {
  28. return false;
  29. }
  30. }
  31. return true;
  32. }
  33. void backtrack(vector<string> &board, int row) {
  34. if (row == board.size()) {
  35. res.push_back(board);
  36. return;
  37. }
  38. auto result = board[row];
  39. for (int col = 0; col < result.size(); col++) {
  40. if (!isVaild(board, row, col)) {
  41. continue;
  42. }
  43. board[row][col] = 'Q';
  44. backtrack(board, row + 1);
  45. board[row][col] = '.';
  46. }
  47. }
  48. vector<vector<string>> solveNQueens(int n) {
  49. vector<string> board(n, string(n, '.'));
  50. backtrack(board, 0);
  51. return res;
  52. }
  53. int main() { return 0; }