当前位置: 首页 > article >正文

穷举vs暴搜vs深搜vs回溯vs剪枝系列一>N 皇后

题目: 

 


解析:

1.决策树:  

 


代码设计: 

 


根据决策树剪枝设计: 

 


代码: 

class Solution {
    private List<List<String>> ret;
    private char[][] path;
    private boolean[] checkdig1,checkdig2,checkcol;
    int n;

    public List<List<String>> solveNQueens(int _n) {
        n = _n;
        ret = new ArrayList<>();
        path = new char[n][n];
        checkcol = new boolean[n];//判断列有没有n皇后
        checkdig1 = new boolean[2*n];//判断主对角线有没有n皇后
        checkdig2 = new boolean[2*n];//判断副对角线有没有n皇后



        for(int i = 0; i < n; i++)
            Arrays.fill(path[i],'.');    

        dfs(0);
        return ret;
    }

    private void dfs(int row){
        if(row == n){
            List<String> tmp = new ArrayList<>();  
            for(int i = 0; i < n; i++){
                tmp.add(new String(path[i]));
            }
            ret.add(new ArrayList<>(tmp));
            return;
        } 

        for(int col = 0; col < n; col++){

            //剪枝写法,能不能放N 皇后:
            if(checkcol[col] == false && checkdig1[col-row+n] == false && checkdig2[col+row] == false){
                path[row][col] = 'Q';
                checkcol[col] = checkdig1[col-row+n] = checkdig2[col+row] = true;
                dfs(row+1);

                //恢复现场
                path[row][col] = '.';
                checkcol[col] = checkdig1[col-row+n] = checkdig2[col+row] = false;
            }
        }
    }
}

http://www.kler.cn/a/511307.html

相关文章:

  • 解决 多层跳板机情况下,ssh可以成功连但是VSCode失败
  • 基于SpringBoot+Vue的智慧动物园管理系统的设计与实现
  • SpringBoot实现定时任务,使用自带的定时任务以及调度框架quartz的配置使用
  • 论文阅读:CosAE Learnable Fourier Series for Image Restoration
  • 20250118-读取并显示彩色图像以及提取彩色图像的 R、G、B 分量
  • cmake foreach 条件判断
  • ASP.NET Core Web API 创建指南
  • 基于Springboot的二手车交易系统【附源码】
  • Swift Parameter-free Attention Network模型详解及代码复现
  • 【Web】2025-SUCTF个人wp
  • SpringBoot+Vue小区智享物业管理系统(高质量源码,可定制,提供文档,免费部署到本地)
  • Spring Boot 整合 Redis:提升应用性能的利器
  • Json学习与实践
  • 开发模式(webpack-dev-server)
  • C语言之字符函数和字符串函数(下)
  • 如何使用 Pytest 断言测试 Python 异常处理
  • 计算机网络 (51)鉴别
  • Mysql 主从复制原理及其工作过程,配置一主两从实验
  • LeetCode热题100(子串篇)
  • CesiumLab和CIMRTS的尝试融合
  • 学技术学英语:TCP的三次握手和四次挥手
  • 基于PSO粒子群优化TCN时间卷积神经网络时间序列预测算法matlab仿真
  • 代码随想录26
  • OpenCV相机标定与3D重建(60)用于立体校正的函数stereoRectify()的使用
  • 51c自动驾驶~合集48
  • 设计模式:责任链模式——行为型模式