【回溯】【DFS】51.N皇后

题目

java 复制代码
class Solution {
    public List<List<String>> solveNQueens(int n) {
        List<List<String>> res = new ArrayList<>();
        char[][] tmp = new char[n][n];
        for (int i = 0; i < n; ++i) {
            Arrays.fill(tmp[i], '.');
        }
        dfs(tmp, 0, res);

        return res;
    }

    public void dfs(char[][] tmp, int layer, List<List<String>> res) {
        int n = tmp.length;
        if (layer == n) {
            List<String> solu = new ArrayList<>();
            for (int k = 0; k < n; ++k) {
                solu.add(String.valueOf(tmp[k]));
            }
            res.add(solu);
            return;
        }
        for (int k = 0; k < n; ++k) {
            if (isValid(tmp, layer, k)) {
                tmp[layer][k] = 'Q';
                dfs(tmp, layer + 1, res);
                tmp[layer][k] = '.';
            }
        }
    }

    boolean isValid(char[][] tmp, int x, int y) {
        int n = tmp.length;
        for (int i = 0; i < n; ++i) {
            if (tmp[i][y] == 'Q' && i < x) {
                return false;
            }
        }
        int i = 1;
        while (x - i >= 0 && y - i >= 0) { 
            if (tmp[x - i][y - i] == 'Q') {
                return false;
            }
            ++i;
        }
        i = 1;
        while (x - i >= 0 && y + i < n) {
            if (tmp[x - i][y + i] == 'Q') {
                return false;
            }
            ++i;
        }
        
        return true;
    }
}
相关推荐
玄〤10 小时前
枚举问题的两大利器:深度优先搜索(DFS)与下一个排列(Next Permutation)算法详解(Java版本)(漫画解析)
java·算法·深度优先·dfs
小冻梨66610 小时前
ABC445 C - Sugoroku Destination题解
c++·算法·深度优先·图论·
重生之后端学习1 天前
78. 子集
java·数据结构·算法·职场和发展·深度优先
重生之后端学习1 天前
46. 全排列
数据结构·算法·职场和发展·深度优先·图论
踩坑记录1 天前
leetcode hot100 46. 全排列 medium 递归回溯 dfs
leetcode·深度优先
近津薪荼1 天前
dfs专题9——找出所有子集的异或总和再求和
算法·深度优先
重生之后端学习2 天前
207. 课程表
java·数据结构·算法·职场和发展·深度优先
额,不知道写啥。2 天前
HAO的DP
c++·算法·深度优先·动态规划
重生之后端学习2 天前
208. 实现 Trie (前缀树)
java·开发语言·数据结构·算法·职场和发展·深度优先
Bear on Toilet3 天前
递归_二叉树_50 . 从前序与中序遍历序列构造二叉树
数据结构·算法·leetcode·深度优先·递归