zoukankan      html  css  js  c++  java
  • LeetCode-51.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.

    Example:

    Input: 4
    Output: [
     [".Q..",  // Solution 1
      "...Q",
      "Q...",
      "..Q."],
    
     ["..Q.",  // Solution 2
      "Q...",
      "...Q",
      ".Q.."]
    ]
    Explanation: There exist two distinct solutions to the 4-queens puzzle as shown above.

    使用深度优先遍历,并剪枝
    注意斜线上的规律,左斜线上的点 横纵坐标和相同,右斜线上的点 横纵坐标差相同
     1 class Solution {//mytip
     2     List<List<String>> re = new ArrayList<>();
     3     
     4     public List<List<String>> solveNQueens(int n) {
     5         List<Integer> cols= new ArrayList<>();
     6         dfs(n,0,cols);
     7         return re;
     8         
     9     }
    10     
    11     private void dfs(int n,int level,List<Integer> cols){
    12         if(level==n){
    13             List<String> list = new ArrayList<>();
    14             for (int i = 0; i < n ; i++) {
    15                 StringBuffer s = new StringBuffer();
    16                 int col= cols.get(i);
    17                 for (int j = 0; j < n; j++) {
    18                     if(j==col){
    19                         s.append("Q");
    20                     }
    21                     else{
    22                         s.append(".");
    23                     }
    24                 }
    25                 list.add(s.toString());
    26             }
    27             re.add(list);
    28             return;
    29         }
    30         for (int i = 0; i < n ; i++) {
    31             int flag = 0;
    32             for (int j = 0; j < cols.size(); j++) {
    33                 int col = cols.get(j);
    34                 if(i==col|| i+level==j+col || i-level==col-j){
    35                     flag=1;
    36                     break;
    37                 }
    38             }
    39             if(0==flag){
    40                 cols.add(i);
    41                 dfs(n,level+1,cols);
    42                 cols.remove(cols.size()-1);
    43             }
    44         }
    45     }
    46 }

    更简洁写法
     1 class Solution {//mytip
     2     List<List<String>> re = new ArrayList<>();
     3     
     4     public List<List<String>> solveNQueens(int n) {
     5         List<Integer> cols= new ArrayList<>();
     6         dfs(n,0,cols,new ArrayList<Integer>(),new ArrayList<Integer>());
     7         return re;
     8         
     9     }
    10     
    11     private void dfs(int n,int level,List<Integer> cols,List<Integer> sum,List<Integer> dif){
    12         if(level==n){
    13             List<String> list = new ArrayList<>();
    14             for (int i = 0; i < n ; i++) {
    15                 char[] s= new char[n];
    16                 Arrays.fill(s,'.');
    17                 s[cols.get(i)]='Q';
    18                 list.add(new String(s));
    19             }
    20             re.add(list);
    21             return;
    22         }
    23         for (int i = 0; i < n ; i++) {
    24             if(cols.contains(i)||sum.contains(i+level)||dif.contains(i-level))
    25                 continue;
    26             cols.add(i);
    27             sum.add(i+level);
    28             dif.add(i-level);
    29             dfs(n,level+1,cols,sum,dif);
    30             cols.remove(cols.size()-1);
    31             sum.remove(sum.size()-1);
    32             dif.remove(dif.size()-1);
    33         }
    34     }
    35 }

    相关题

    N皇后 LeetCode52 https://www.cnblogs.com/zhacai/p/10621381.html



  • 相关阅读:
    第三十章 混合线程同步构造
    第二十九章 基元线程同步构造
    第二十八章 I/O限制的异步操作
    第二十七章 计算限制的异步操作
    第二十六章 线程基础
    第二十五章 与WinRT组件互操作
    css实现排序箭头
    js中的toFixed神坑
    react使用中碰到的小问题
    看到一个js中sleep的例子,挺好玩的
  • 原文地址:https://www.cnblogs.com/zhacai/p/10621300.html
Copyright © 2011-2022 走看看