zoukankan      html  css  js  c++  java
  • LeetCode 51.N-Queens

    51.N-Queens(N皇后)

    题目: 

      n 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。

      给定一个整数 n,返回所有不同的 皇后问题的解决方案。

      每一种解法包含一个明确的 n 皇后问题的棋子放置方案,该方案中 'Q' 和 '.' 分别代表了皇后和空位。

      示例:

      输入: 4
      输出: [
       [".Q..",  // 解法 1
        "...Q",
        "Q...",
        "..Q."],
    
       ["..Q.",  // 解法 2
        "Q...",
        "...Q",
        ".Q.."]
      ]
      解释: 4 皇后问题存在两个不同的解法。

    思路:

      

      这题的思路和之前的N皇后II一样,都是运用回溯法,只是输出较难设置,还有一个重点,是其中存放答案的res,需要在每次计算前clear一下,要不然就无法ac。

      N皇后II(https://www.cnblogs.com/blogxjc/p/10890322.html)。

    代码:

     1     private static boolean col[];
     2     private static boolean line1[];
     3     private static boolean line2[];
     4     private static int answer[];
     5     private static List<List<String>> res = new LinkedList<>();
     6     
     7     public static List<List<String>> solveNQueens(int n) 
     8     {
     9         col = new boolean[n];
    10         line1 = new boolean[2 * n - 1];
    11         line2 = new boolean[2 * n - 1];
    12         answer = new int [n];
    13         res.clear();
    14         putQueen(n, 0);  
    15         return res;
    16     }
    17     
    18     private static void putQueen(int n, int index) 
    19     {
    20         if (index == n) 
    21         {
    22             List<String> item = new ArrayList<String>();
    23             for(int i = 0; i<answer.length; i++)
    24             {
    25                 StringBuilder sb = new StringBuilder();
    26                 for(int j = 0; j<answer.length; j++)
    27                 {
    28                     if(answer[i] != j)
    29                         sb.append('.');
    30                     else
    31                         sb.append('Q');
    32                 }
    33                 item.add(sb.toString());
    34             }
    35             res.add(item);
    36         }
    37             
    38       
    39         for (int i = 0; i < n; i++) 
    40         {
    41             if (!col[i] && !line1[i - index + n - 1] && !line2[i + index]) 
    42             {
    43                 answer[index] = i;
    44                 col[i] = true;
    45                 line1[i - index + n - 1] = true;
    46                 line2[i + index] = true;
    47 
    48                 col[i] = false;
    49                 line1[i - index + n - 1] = false;
    50                 line2[i + index] = false;
    51             }
    52         }
    53     }
    View Code
  • 相关阅读:
    JDK8中的 Lambda 表达式
    IDEA导入新项目jar包以及项目依赖tomcat设置
    idea导入项目,类为灰色,左下角有个红圈
    mysql服务忽然挂了,出现错误信息: Can’t connect to MySQL server on ‘localhost’ (10061)
    mysql、oracle、sql server连接信息
    mybatis中select * 中有字段,自己在起一个别名,然后实体类会使用哪个?
    pymongo的操作
    mongodb备份恢复
    mongodb建立索引
    mongodb聚合命令
  • 原文地址:https://www.cnblogs.com/blogxjc/p/10892073.html
Copyright © 2011-2022 走看看