• [LeetCode] NQueens


    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 to solve it!
     1 class Solution {
     2 private:
     3     vector<vector<string> > ret;
     4     int a[100];
     5     bool canUse[100];
     6 public:
     7     bool check(int y, int n)
     8     {
     9         for(int i = 0; i < n; i++)
    10             if (abs(i - n) == abs(y - a[i]))
    11                 return false;
    12         return true;
    13     }
    14     
    15     void solve(int dep, int maxDep)
    16     {
    17         if (dep == maxDep)
    18         {
    19             vector<string> ans;
    20             for(int i = 0; i < maxDep; i++)
    21             {
    22                 string s;
    23                 for(int j = 0; j < a[i]; j++)
    24                     s += '.';
    25                 s += 'Q';
    26                 for(int j = 0; j < maxDep - (a[i] + 1); j++)
    27                     s += '.';
    28                 ans.push_back(s);
    29             }
    30             ret.push_back(ans);
    31             
    32             return;
    33         }
    34         
    35         for(int i = 0; i < maxDep; i++)
    36             if (canUse[i] && check(i, dep))
    37             {
    38                 canUse[i] = false;
    39                 a[dep] = i;
    40                 solve(dep + 1, maxDep);
    41                 canUse[i] = true;             
    42             }
    43     }
    44     
    45     vector<vector<string> > solveNQueens(int n) {
    46         // Start typing your C/C++ solution below
    47         // DO NOT write int main() function
    48         ret.clear();
    49         memset(canUse, true, sizeof(canUse));
    50         solve(0, n);
    51         return ret;
    52     }
    53 };
  • 相关阅读:
    常用命令-eval简析
    bash手册 之重定向原理与实现
    TCP/IP 编程
    SQL Server存储内幕系列
    ORACLE优化器RBO与CBO介绍总结
    24小时学通LINUX内核系列
    SQL Server 优化器+SQL 基础
    JAVA 强引用、软引用、弱引用、虚引用
    iOS 如何做才安全--逆向工程
    Python 基础学习
  • 原文地址:https://www.cnblogs.com/chkkch/p/2767622.html
Copyright © 2020-2023  润新知