N皇后

1列出所有方案、方案数

 1 package leetcode_2020;
 2 
 3 /*
 4 *https://leetcode-cn.com/problems/n-queens/
 5 
 6 *n 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。
 7 * 给定一个整数 n,返回所有不同的 n 皇后问题的解决方案。
 8 
 9 每一种解法包含一个明确的 n 皇后问题的棋子放置方案,该方案中 'Q' 和 '.' 分别代表了皇后和空位。
10 
11 * */
12 import java.util.LinkedList;
13 import java.util.List;
14 
15 public class code051_N_Queens
16 {
17 
18     List<List<String>> result = new LinkedList<>();
19     public int totalNQueens(int n) {
20         result = solveNQueens(n);
21         return result.size();
22     }
23     public List<List<String>> solveNQueens(int n) {
24         char[][] board = new char[n][n];
25         for(int i = 0; i < n; i++){
26             for(int j = 0; j < n; j++){
27                 board[i][j] = '.';
28             }
29         }
30         backpack(board, 0);
31         return result;
32     }
33 
34     public void backpack(char[][] board, int row){
35         if(board.length == row){
36             List<String> list = new LinkedList<>();
37             for (char[] s: board)
38             {
39                 list.add(String.valueOf(s));
40             }
41             result.add(list);
42             return;
43         }
44         for(int col = 0; col < board.length; col++){
45             if(!isvalid(board, row, col)){
46                 continue;
47             }
48             board[row][col] = 'Q';
49             backpack(board, row + 1);
50             board[row][col] = '.';
51         }
52     }
53     public boolean isvalid(char[][] board, int row, int col){
54 
55         for(int i = 0; i < board.length; i++){
56             if(board[i][col] == 'Q'){
57                 return false;
58             }
59         }
60         for(int i = row - 1, j = col - 1; i >= 0 && j >= 0; i--, j--){
61             if(board[i][j] == 'Q')
62                 return false;
63         }
64         for(int i = row - 1, j = col + 1; i >= 0 && j < board.length; i--, j++){
65             if(board[i][j] == 'Q')
66                 return false;
67         }
68         return true;
69     }
70 
71     public static void main(String[] args){
72         code051_N_Queens n_queens = new code051_N_Queens();
73         // System.out.println(n_queens.solveNQueens(4));
74         System.out.println(n_queens.totalNQueens(4));
75     }
76 }
posted @ 2020-04-04 11:35  ~花开不败~  阅读(185)  评论(0编辑  收藏  举报