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

蓝桥杯 - 受伤的皇后

解题思路:

递归 + 回溯(n皇后问题的变种)

在 N 皇后问题的解决方案中,我们是从棋盘的顶部向底部逐行放置皇后的,这意味着在任何给定时间,所有未来的行(即当前行之下的所有行)都还没有被探查或放置任何皇后。因此,检查下方行是没有意义的,因为它们总是空的。所以只需要检查左上45°和右上45°。

import java.util.Scanner;

public class Main {
    static int count = 0;

    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        int n = scan.nextInt();
        int[][] arr = new int[n][n];
        dfs(arr, 0);
        System.out.println(count);
    }

    public static void dfs(int[][] arr, int row) {
        if (row == arr.length) {
            count++;
            return;
        }
        // 遍历列,因为n行n列,所以arr.length和arr[0].length是一样的
        for (int j = 0; j < arr.length; j++) {
            if (checkValid(arr, row, j)) {
                arr[row][j] = 1;
                dfs(arr, row + 1);
                // 回溯
                arr[row][j] = 0;
            }
        }
    }

    public static boolean checkValid(int[][] arr, int row, int col) {
        // 检查列,因为n行n列,所以row既是行的长度又是列的长度
        for (int i = 0; i < row; i++) {
            if (arr[i][col] == 1) {
                return false;
            }
        }
        // 检查左上45°
        for (int i = row - 1, j = col - 1; i >= 0 && j >= 0; i--, j--) {
            if (arr[i][j] == 1 && Math.abs(row - i) < 3) {
                return false;
            }
        }
        // 检查右上45°
        for (int i = row - 1, j = col + 1; i >= 0 && j < arr.length; i--, j++) {
            if (arr[i][j] == 1 && Math.abs(row - i) < 3) {
                return false;
            }
        }
        return true;
    }
}

相关文章:

  • redis的三大模式的演化及集群模式思考和总结
  • Git汇总
  • 【开源书籍】深入讲解内核网络、Kubernetes、ServiceMesh、容器等云原生相关技术。
  • JavaIO输入输出
  • 企业如何设计和实施有效的网络安全演练?
  • 大话设计模式——六大基本设计原则(SOLID原则)
  • 【C语言】扫雷小游戏
  • 路由Vue-Router使用
  • windbg托管内存泄漏排查
  • 魔众 文库配置异步转换
  • 网格矢量如何计算莫兰指数
  • SpringBoot学习之Kibana下载安装和启动(Mac版)(三十二)
  • Mac下Docker Desktop starting的解决方法
  • 电商系列之风控安全
  • C++--友元
  • 蓝桥杯 经验技巧篇
  • Linux中磁盘管理
  • 白色磨砂质感html5页源码
  • 【Redis】NoSQL之Redis的配置和优化
  • 51单片机实验02- P0口流水灯实验
  • https://app.hackthebox.com/machines/Inject
  • Spring —— Spring简单的读取和存储对象 Ⅱ
  • 渗透测试之冰蝎实战
  • Mybatis、TKMybatis对比
  • Microsoft Office 2019(2022年10月批量许可版)图文教程
  • 《谷粒商城基础篇》分布式基础环境搭建
  • 哈希表题目:砖墙
  • Vue 3.0 选项 生命周期钩子
  • 【车载嵌入式开发】AutoSar架构入门介绍篇
  • 【计算机视觉 | 目标检测】DETR风格的目标检测框架解读