• [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 };
  • 相关阅读:
    HDU 4685
    HDU 2519 新生晚会(组合问题)
    HDU 1241 Oil Deposits(递归,搜索)
    数据结构之线性表
    coocs项目的创建
    cocos开发环境搭建
    数据结构之算法时间复杂度
    c++ auto类型说明符
    HDU 6170 Two strings(DP)
    HDU 6138 Fleet of the Eternal Throne(AC自动机)
  • 原文地址:https://www.cnblogs.com/easonliu/p/3671450.html
Copyright © 2020-2023  润新知