• [Leetcode] N-Queens


    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.."]
    ]

     回溯法,DFS,没啥好说的。

     1 class Solution {
     2 public:
     3     bool isValid(vector<string> &board, int x, int y) {
     4         for (int i = 0; i < x; ++i) {
     5             if (board[i][y] == 'Q') return false;
     6         }
     7         for (int i = 0; i < board.size(); ++i) {
     8             for (int j = 0; j < board.size(); ++j) {
     9                 if (i != x && j != y && i-j == x-y && board[i][j] == 'Q')
    10                     return false;
    11                 if (i != x && j != y && i+j == x+y && board[i][j] == 'Q')
    12                     return false;
    13             }
    14         }
    15         return true;
    16     }
    17     
    18     void solveHelper(vector<vector<string> > &res, vector<string> &board, int idx) {
    19         if (idx == board.size()) {
    20             res.push_back(board);
    21             return;
    22         }
    23         for (int i = 0; i < board.size(); ++i) {
    24             board[idx][i] = 'Q';
    25             if (isValid(board, idx, i)) {
    26                 solveHelper(res, board, idx + 1);
    27             }
    28             board[idx][i] = '.';
    29         }
    30     }
    31     
    32     vector<vector<string> > solveNQueens(int n) {
    33         vector<vector<string> > res;
    34         vector<string> board;
    35         string row;
    36         for (int i = 0; i < n; ++i) {
    37             row.push_back('.');
    38         }
    39         for (int i = 0; i < n; ++i) {
    40             board.push_back(row);
    41         }
    42         solveHelper(res, board, 0);
    43         return res;
    44     }
    45 };
  • 相关阅读:
    上海某地产监控项目
    2020,8种必备Selenium编写自动化用例的技巧
    使用 Postman 做 API 自动化测试
    Python最火的第三方开源测试框架 ——pytest
    基于Appium的UI自动化测试
    4招了解前端单元测试
    你应该学会的接口调试神器——Postman高级用法
    分分钟玩转UI自动化测试
    Python Selenium 之数据驱动测试的实现
    python+requests接口自动化框架
  • 原文地址:https://www.cnblogs.com/easonliu/p/3671450.html
Copyright © 2020-2023  润新知