首页 > 其他 > 详细

LeetCode——N皇后 II

时间:2020-06-16 12:03:27      阅读:39      评论:0      收藏:0      [点我收藏+]

Q:n 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。
技术分享图片
给定一个整数 n,返回 n 皇后不同的解决方案的数量。

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

["..Q.", ?// 解法 2
? "Q...",
? "...Q",
? ".Q.."]
]

提示:皇后,是国际象棋中的棋子,意味着国王的妻子。皇后只做一件事,那就是“吃子”。当她遇见可以吃的棋子时,就迅速冲上去吃掉棋子。当然,她横、竖、斜都可走一或七步,可进可退。(引用自 百度百科 - 皇后 )

A:
同I中的回溯法

    private int result;

    public int totalNQueens(int n) {
        if (n <= 1)
            return n;
        ArrayList<Integer> l = new ArrayList<>();
        result = 0;
        help(0, n, l);
        return result;
    }

    private void help(int row, int n, ArrayList<Integer> l) {
        if (row == n) {
            result++;
            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(ArrayList<Integer> l, int col) {
        int currRow = l.size();
        for (int row = 0; row < l.size(); row++) {
            if (Math.abs(currRow - row) == Math.abs(col - l.get(row))) {
                return true;
            }
        }
        return false;
    }

LeetCode——N皇后 II

原文:https://www.cnblogs.com/xym4869/p/13139421.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!