八皇后00

题目链接

八皇后

题目描述

注意点

  • 每个皇后都不同行、不同列,也不在对角线上
  • “对角线”指的是所有的对角线,不只是平分整个棋盘的那两条对角线

解答思路

  • 本题与N皇后相同,思路仍然是深度优先遍历的同时存储前面每一行选取了哪些列,保证本行选取的列不与前面行有同一列或者在对角线的情况

代码

class Solution {
    public List<List<String>> solveNQueens(int n) {
        List<List<String>> res = new ArrayList<>();
        List<Integer> visitedCol = new ArrayList<>();
        dfs(n, 0, visitedCol, res);
        return res;
    }

    public void dfs(int n, int row, List<Integer> visitedCol, List<List<String>> res) {
        if (row >= n) {
            List<String> sonRes = fillSonRes(visitedCol, n);
            res.add(new ArrayList<>(sonRes));
            return;
        }
        for (int col = 0; col < n; col++) {
            // 该列已经有皇后
            if (visitedCol.contains(col)) {
                continue;
            }
            // 对角线是否有皇后
            if (isDialog(visitedCol, row, col)) {
                continue;
            }
            // 该位置可以放皇后
            visitedCol.add(col);
            dfs(n, row + 1, visitedCol, res);
            // 回溯
            visitedCol.remove(visitedCol.size() - 1);
        }
    }

    public boolean isDialog(List<Integer> visitedCol, int row, int col) {
        for (int i = 0; i < visitedCol.size(); i++) {
            int shifting = row - i;
            // 左右对角线
            if (visitedCol.get(i) == col - shifting || visitedCol.get(i) == col + shifting) {
                return true;
            }
        }
        return false;
    }

    public List<String> fillSonRes(List<Integer> visitedCol, int n) {
        List<String> sonRes = new ArrayList<>(n);
        for (int row = 0; row < visitedCol.size(); row++) {
            StringBuilder sb = new StringBuilder();
            for (int col = 0; col < n; col++) {
                if (col == visitedCol.get(row)) {
                    sb.append("Q");
                } else {
                    sb.append(".");
                }
            }
            sonRes.add(sb.toString());
        }
        return sonRes;
    }
}

关键点

  • 深度优先遍历的思想
  • 怎么确定在dfs的过程中某一行的某一列是否与前面行在同一列或者对角线上

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/748600.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

深圳网页设计收费情况

深圳是中国最具活力和发展速度最快的城市之一&#xff0c;随着经济的快速发展&#xff0c;各种行业都飞速发展&#xff0c;尤其是互联网行业。网页设计是互联网行业的重要组成部分&#xff0c;深圳的网页设计师数量也是非常庞大的。那么&#xff0c;深圳网页设计师的收费情况是…

LLM 推理:Nvidia TensorRT-LLM 与 Triton Inference Server

随着LLM越来越热门&#xff0c;LLM的推理服务也得到越来越多的关注与探索。在推理框架方面&#xff0c;tensorrt-llm是非常主流的开源框架&#xff0c;在Nvidia GPU上提供了多种优化&#xff0c;加速大语言模型的推理。但是&#xff0c;tensorrt-llm仅是一个推理框架&#xff0…

互联网信息服务算法备案流程与要求

一、备案申请的办理流程 企业通过网信办的互联网信息服务算法备案系统&#xff08;https://beian.cac.gov.cn/#/index&#xff09;提交算法备案申请。填报信息包括三部分&#xff0c;分别是算法主体信息、产品及功能信息、算法信息。备案中比较重要的文件包括主体信息中的《落…

如何查看websocket连接信息

Chrome 浏览器中查看 webSocket 连接信息_谷歌浏览器看不到 websocket-CSDN博客 Getting Started — Flask-SocketIO documentation 运作原理 | Socket.IO

Oracle数据库使用指南基本概念

学习总结 1、掌握 JAVA入门到进阶知识(持续写作中……&#xff09; 2、学会Oracle数据库入门到入土用法(创作中……&#xff09; 3、手把手教你开发炫酷的vbs脚本制作(完善中……&#xff09; 4、牛逼哄哄的 IDEA编程利器技巧(编写中……&#xff09; 5、面经吐血整理的 面试技…

不锈钢氩弧焊丝ER316L

说明&#xff1a;TG316L 是超低碳的不锈钢焊丝。熔敷金属耐蚀、耐热、抗裂性能优良。防腐蚀性能良好。 用途:用于石油化工、化肥设备等。也可用于要求焊接后不进行热处理的高Cr钢的焊接。

Android模拟器linux内核的下载,编译,运行,驱动开发测试

Android模拟器linux内核的下载&#xff0c;编译&#xff0c;运行&#xff0c;内核模块开发 1.下载适合Android模拟器的内核 git clone https://aosp.tuna.tsinghua.edu.cn/android/kernel/goldfish.git git branch -a git checkout android-goldfish-4.14-gchips 新建一个目录…

Word恢复历史文档,记好4个方法就足够

“我正在准备一个重要的报告&#xff0c;但是电脑突然就崩溃了&#xff0c;导致我的文档还没保存就被关闭了&#xff0c;大家有什么方法可以恢复Word历史文档吗&#xff1f;快给我出出主意吧&#xff01;” 在数字化时代&#xff0c;文档编辑和保存已经成为我们日常工作和学习中…

flink使用StatementSet降低资源浪费

背景 项目中有很多ods层&#xff08;mysql 通过cannal&#xff09;kafka&#xff0c;需要对这些ods kakfa做一些etl操作后写入下一层的kafka&#xff08;dwd层&#xff09;。 一开始采用的是executeSql方式来执行每个ods→dwd层操作&#xff0c;即类似&#xff1a; def main(…

信创产业生态圈各企业分布

文章目录 应用系统&#xff1a;办公管理&#xff1a;云平台网络安全基础软件操作系统数据库中间件 基础硬件芯片 我们国家在前几年提出了信创战略计划&#xff0c;就是为了在信息技术领域&#xff0c;将一些国外牌子的设备和应用、软件逐渐替换成国产的&#xff0c;保证国家的金…

记录samba账号操作日志,增删改查等(安全审计)

说明&#xff1a;windows用户映射samba文件共享服务&#xff0c;记录samba账号的操作日志 只要三步&#xff01; 安装必要软件包 audit配置samba共享配置Syslog 具体步骤 1. 安装必要的软件包 audit 是linux系统的高级审计框架 主要功能&#xff1a;系统调用监控、文件和目…

微前端框架是为了解决项目应用在大型项目中带来的复杂性和维护难题而提出的技术方案。

微前端框架是为了解决单页应用&#xff08;SPA&#xff09;在大型项目中带来的复杂性和维护难题而提出的技术方案。Qiankun.js、MicroApp 和 Wujie 是三种流行的微前端框架。以下是对这三种框架的优缺点分析&#xff1a; Qiankun.js 优点 成熟度高&#xff1a;Qiankun.js 基…

34534534

c语言中的小小白-CSDN博客c语言中的小小白关注算法,c,c语言,贪心算法,链表,mysql,动态规划,后端,线性回归,数据结构,排序算法领域.https://blog.csdn.net/bhbcdxb123?spm1001.2014.3001.5343 给大家分享一句我很喜欢我话&#xff1a; 知不足而奋进&#xff0c;望远山而前行&am…

如何高效使用 .http 文件记录和测试API接口

1. 前言 在现代软件开发中&#xff0c;API&#xff08;应用程序接口&#xff09;成为了系统间通信的重要桥梁。.http 文件作为一种轻量级的API请求描述方式&#xff0c;不仅便于开发者记录和分享API接口信息&#xff0c;还能够帮助自动化测试流程。本文将深入介绍如何有效地使…

1. jenkins持续集成交付

jenkins持续集成交付 一、jenkins介绍二、jenkins的安装部署1、下载jenkins2、安装jenkins3、修改插件下载地址4、初始化jenkins 一、jenkins介绍 持续集成交付&#xff0c; CI/CD 偏开发、项目编译、部署、更新 二、jenkins的安装部署 1、下载jenkins [rootjenkins ~]# wge…

公交车载视频监控系统概述

引言 随着城市交通的不断发展&#xff0c;公交车作为城市公共交通的重要组成部分&#xff0c;其安全性和管理效率越来越受到关注。为了提升公交车运营的安全性和管理效率&#xff0c;基于索迪迈视频监控管理平台&#xff0c;结合3G/4G网络技术&#xff0c;我们构建了一套公交车…

【BES2500x系列 -- RTX5操作系统】深入探索CMSIS-RTOS RTX -- 同步与通信篇 -- 信号量和互斥锁 --(三)

&#x1f48c; 所属专栏&#xff1a;【BES2500x系列】 &#x1f600; 作  者&#xff1a;我是夜阑的狗&#x1f436; &#x1f680; 个人简介&#xff1a;一个正在努力学技术的CV工程师&#xff0c;专注基础和实战分享 &#xff0c;欢迎咨询&#xff01; &#x1f49…

《mysql》--mysql约束

数据库约束 有的时候数据库中的数据是有一定要求的&#xff0c;有些数据认为是合法数据&#xff0c;有些是非法数据&#xff0c;如果靠人工检查显然是不靠谱的&#xff1b; 数据库会自动的对数据的合法性进行校验检查目的就是&#xff0c;保证数据中能够避免被插入/修改一些非…

工业AIoT竞赛流程

不要点到重置&#xff01;&#xff01;&#xff01;要刷新虚拟机就点重启 xshell连接虚拟机&#xff1a;ssh rootPublic IP 环境构建 vim /etc/hosts 按 i 进入插入模式&#xff0c;加内网ip和主机名&#xff0c;按esc&#xff0c;按 : &#xff0c;按wq 三个虚拟机都这样配 …