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

    804. N-Queens II(N 皇后 II)

    题目:

      

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

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

      示例:

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

    思路:

      这题思路较清晰,先在第一行第一列放置皇后,之后第二行寻找可以放皇后的地方,一行一行放置,如果哪一行不能放置,那么就回溯到上一行,如果放置到了最后一行,那么就代表这种情况成立,计数加一,返回之前一步。 

    图解:

      从左上角开始,line1是正对角线,line2是斜对角线,col是竖列。

            

    代码:

     1     //
     2     private static boolean col[];
     3 
     4     //正对角线 x-y+n-1
     5     private static boolean line1[];
     6 
     7     //斜对角线 x+y
     8     private static boolean line2[];
     9 
    10     public static int totalNQueens(int n) 
    11     {
    12         col = new boolean[n];
    13         line1 = new boolean[2 * n - 1];
    14         line2 = new boolean[2 * n - 1];
    15         return putQueen(n, 0);
    16     }
    17 
    18     private static int putQueen(int n, int index) 
    19     {
    20         int flag = 0;
    21         if (index == n) 
    22             return 1;
    23       
    24         for (int i = 0; i < n; i++) 
    25         {
    26             if (!col[i] && !line1[i - index + n - 1] && !line2[i + index]) 
    27             {
    28 
    29                 col[i] = true;
    30                 line1[i - index + n - 1] = true;
    31                 line2[i + index] = true;
    32                 flag = flag + putQueen(n, index + 1);
    33 
    34                 col[i] = false;
    35                 line1[i - index + n - 1] = false;
    36                 line2[i + index] = false;
    37             }
    38         }
    39         return flag;
    40     }
    View Code
  • 相关阅读:
    图片上传 多张
    ES6的新特性
    css超出一行添加省略号属性:text-overflow和white-space
    JQuery 中 is(':visible') 解析及用法
    Git详解之Git分支
    jQuery选择器和选取方法
    git命令之git remote的用法
    运算符中的一些小技巧
    Git 忽略一些文件不加入版本控制
    git 查看远程分支、本地分支、创建分支、把分支推到远程repository、删除本地分支
  • 原文地址:https://www.cnblogs.com/blogxjc/p/10890322.html
Copyright © 2011-2022 走看看