• LeetCode——N皇后


    Q:n 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。
    PS:皇后可以攻击同⼀⾏、同⼀列、左上左下右上右下四个⽅向的任意单位。
    给定一个整数 n,返回所有不同的 n 皇后问题的解决方案。每一种解法包含一个明确的 n 皇后问题的棋子放置方案,该方案中 'Q' 和 '.' 分别代表了皇后和空位。

    示例:
    输入: 4
    输出: [
    [".Q..", // 解法 1
    "...Q",
    "Q...",
    "..Q."],

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

    A:回溯法

        private List<List<String>> result = new ArrayList<>();
    
        public List<List<String>> solveNQueens(int n) {
            if (n == 0)
                return result;
            List<Integer> l = new ArrayList<>();
            if (n == 1) {
                List<String> l1 = new ArrayList<>();
                l1.add("Q");
                result.add(l1);
                return result;
            }
            help(0, n, l);
            return result;
        }
    
        private void help(int row, int n, List<Integer> l) {
            if (row == n) {
                List<String> strList = new ArrayList<>();
                for(Integer num : l){
                    char[] t = new char[n];
                    Arrays.fill(t,'.');
                    t[num] = 'Q';
                    strList.add(new String(t));
                }
                result.add(strList);
                return;
            }
            for (int col = 0; col < n; col++) {
                if (!l.contains(col)) {
                    if (!isDiagonal(l, col)) {
                        l.add(col);
                        help(row + 1, n, l);
                        l.remove(l.size() - 1);
                    }
                }
            }
        }
    
        private boolean isDiagonal(List<Integer> currentQueen, int col) {
            int currentRow = currentQueen.size();
            for (int row = 0; row < currentQueen.size(); row++) {
                //判断对角线
                if (Math.abs(currentRow - row) == Math.abs(col - currentQueen.get(row))) {
                    return true;
                }
            }
            return false;
        }
    
  • 相关阅读:
    nginx反向代理前后端分离项目(后端多台)
    部署http访问SVN模式出现403问题
    The server quit without updating PID file
    guns开源项目数据库切换为oracle
    window环境下修改postgrep密码
    mybatis中怎样使用having?
    PostgreSQL时间段查询
    Java实现产生一个int数组,长度为100,并向其中随机插入1-100,并且不能重复。
    Jenkins构建maven项目跳过测试用例的命令
    supervisord
  • 原文地址:https://www.cnblogs.com/xym4869/p/12630902.html
Copyright © 2020-2023  润新知