[刷题]N-Queens

原创 2015年07月07日 21:39:11

[LintCode]N-Queens

class Solution {
    /**
     * Get all distinct N-Queen solutions
     * @param n: The number of queens
     * @return: All distinct solutions
     * For example, A string '...Q' shows a queen on forth position
     */
    ArrayList<ArrayList<String>> solveNQueens(int n) {
        // 2015-07-07
        ArrayList<ArrayList<String>> rst = new ArrayList<>();
        if (n == 0) {
            return rst;
        }
        ArrayList<Integer> list = new ArrayList<>();
        helper(rst, list, n);
        return rst;
    }
    
    private void helper(ArrayList<ArrayList<String>> rst, ArrayList<Integer> list ,int n) {
        // 控制树的深度
        if (list.size() == n) {
            rst.add(convert(list));
            return;
        }
        
        for (int i = 0; i < n; i++) {
            // 控制分支
            if (!isValid(list, i)) {
                continue;
            }
            list.add(i);
            helper(rst, list, n);
            list.remove(list.size() - 1);
        }
        return;
    }
    
    // 将数组转为string组
    private ArrayList<String> convert(ArrayList<Integer> list) {
        ArrayList<String> rst = new ArrayList<>();
        for (int i = 0; i < list.size(); i++) {
            String s = new String("");
            for (int j = 0; j < list.size(); j++) {
                if (j == list.get(i)) {
                    s += "Q";
                } else {
                    s += ".";
                }
            }
            rst.add(s);
        }
        return rst;
    }
    
    // 判断是queen是否可以相互攻击
    private boolean isValid(ArrayList<Integer> list, int k) {
        if (list.size() == 0) {
            return true;
        }
        for (int i = 0; i < list.size(); i++) {
            if (list.get(i) == k) {
                return false;
            }
            if (list.get(i) - i == k - list.size()) {
                return false;
            }
            if (list.get(i) + i == k + list.size()) {
                return false;
            }
        }
        return true;
    }
};


版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

LeetCode刷题笔录N-Queens

这题在CTCIsh

leetcode第一刷_N-Queens

八皇后问题应该是回溯法的教学典范。在本科的时候,有一门课叫面向对象,最后的附录有这个问题的源代码,当时根本不懂编程,照抄下来,运行一下出了结果都很开心,哎。 皇后们的限制条件是不能同行同列,也不能同...

【LeetCode从零单刷】N-Queens II

菜鸡从零单刷 LeetCode 系列!

LeetCode第51题之 N-Queens

思路主要是参考我以前的一篇博客:8皇后问题的两种解法,那篇博客思路写的还比较详细,建议看那篇博客。这里我只用第一种解法实现该题。 下面给出C++源代码:#include #include #in...

LeetCode OJ算法题(五十):N Queens

题目: The n-queens puzzle is the problem of placing n queens on an n×n chessboard such that no tw...
  • op_yu
  • op_yu
  • 2014-08-07 20:39
  • 256

33.N-Queens-N皇后问题(中等题)

N皇后问题 题目 n皇后问题是将n个皇后放置在n*n的棋盘上,皇后彼此之间不能相互攻击。 给定一个整数n,返回所有不同的n皇后问题的解决方案。 每个解决方案包含一个明确的n皇后放置布局,其...

1128. N Queens Puzzle (20)[数学逻辑题]

1. 原题:https://www.patest.cn/contests/pat-a-practise/1128 2. 思路: 题意:数学逻辑题。 给出一个序列,判断是否是国际象棋的一局。 即...

LeetCode OJ算法题(五十一):N Queens II

题目: Follow up for N-Queens problem. Now, instead outputting board configurations, return the...
  • op_yu
  • op_yu
  • 2014-08-07 20:48
  • 224

2017浙江大学计算机和软件考研复试题A题 N Queens Puzzle

The "eight queens puzzle" is the problem of placing eight chess queens on an 8×8 chessboard so that ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)