zoukankan      html  css  js  c++  java
  • leetcode -- N-Queens

    The n-queens puzzle is the problem of placing n queens on an nn 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.."]
    ]
     1 public class Solution {
     2     public static void main(String[] args) {
     3         ArrayList<String[]> result = solveNQueens(4);
     4         System.out.println(result.size());
     5         for(int i = 0; i < result.size(); i++){
     6             System.out.println("solution:" + i);
     7             for(int j = 0; j < result.get(i).length; j++){
     8                 System.out.println(result.get(i)[j]);
     9             }
    10         }
    11     }
    12 
    13     public static ArrayList<String[]> solveNQueens(int n) {
    14         // Start typing your Java solution below
    15         // DO NOT write main() function
    16         ArrayList<String[]> result = new ArrayList<String[]>();
    17         int depth = 0;
    18         int[] rows = new int[n];
    19         for (int i = 0; i < n; i++) {
    20             rows[i] = n + 1;
    21         }
    22         dfs(depth, rows, n, result);
    23         return result;
    24     }
    25 
    26     public static void dfs(int depth, int[] rows, int n, ArrayList<String[]> result) {
    27         if (depth == n) {
    28             String[] s = new String[n];
    29             for (int i = 0; i < n; i++) {
    30                 int m = rows[i];
    31                 StringBuilder tmp = new StringBuilder();
    32                 for (int j = 0; j < n; j++) {
    33                     if (j == m) {
    34                         tmp.append("Q");
    35                         continue;
    36                     }
    37                     tmp.append(".");
    38                 }
    39                 s[i] = tmp.toString();
    40             }
    41             result.add(s);
    42             return;
    43         }
    44         for (int i = 0; i < n; i++) {
    45             rows[depth] = i;
    46             if (isValid(rows, depth)) {
    47                 dfs(depth + 1, rows, n, result);
    48             }
    49         }
    50 
    51     }
    52     public static boolean isValid(int[] rows, int depth) {
    53         for (int i = 0; i < depth; i++) {
    54             if (rows[i] == rows[depth]
    55                     || Math.abs(rows[i] - rows[depth]) == Math.abs(i - depth)) {
    56                 return false;
    57             }
    58         }
    59         return true;
    60     }
    61 }
  • 相关阅读:
    PAT1124:Raffle for Weibo Followers
    Pat1071: Speech Patterns
    PAT1032: Sharing (25)
    Pat1128:N Queens Puzzle
    C++相关:C++的IO库
    Pat1108: Finding Average
    PAT1070:Mooncake
    乐港游戏校招面试总结
    并发编程005 --- future &&futureTask
    并发编程004 --- 线程池的使用
  • 原文地址:https://www.cnblogs.com/feiling/p/3251290.html
Copyright © 2011-2022 走看看