7.13N皇后(LC51-H)

算法:

N皇后是回溯的经典题

画树:

假设N=3

皇后们的约束条件:

  1. 不能同行
  2. 不能同列
  3. 不能同斜线

回溯三部曲:

1.确定函数参数和返回值

返回值:void

参数:

int n:题目给出,N皇后的个数,棋盘大小nxn

int row:用row来记录当前遍历到棋盘的第几层了

char[][] chessboard:二维字符数组,表示棋盘。每个`chessboard[i]` 都是一个字符数组,而`chessboard[i][j]` 则表示二维数组中特定位置 `(i, j)` 处的字符值。

2.确定终止条件

row==n

当递归到棋盘最底层(也就是叶子节点)的时候,就可以收集结果并返回了。

3.单层递归逻辑(for循环)

每次都是要从新的一行的起始位置开始搜,所以都是从0开始。

for (int col = 0;col < n; col++) {if (isValid (row, col, n, chessboard)) {// 验证合法就可以放chessboard[row][col] = 'Q';//递归backTrack(n, row+1, chessboard);//回溯,撤销皇后chessboard[row][col] = '.';}}

验证棋盘是否合法

isValid:先判错

按照如下标准去重:

  1. 不能同行
  2. 不能同列
  3. 不能同斜线 (45度和135度角)

同列

for (int i = 0; i < row; i++) { // 这是一个剪枝if (chessboard[i][col] == 'Q') {return false;}}

同行(其实可以不放,因为在单层搜索的过程中,每一层递归,只会选for循环(也就是同一行)里的一个元素,所以不用去重了。)

for (int j = 0; i < col; j++) { // 这是一个剪枝if (chessboard[row][j] == 'Q') {return false;}}

同斜线(45度)

for (int i = row - 1, j = col - 1; i >=0 && j >= 0; i--, j--) {if (chessboard[i][j] == 'Q') {return false;}}

同斜线(135度)

 for(int i = row - 1, j = col + 1; i >= 0 && j < n; i--, j++) {if (chessboard[i][j] == 'Q') {return false;}}

正确代码:

class Solution {List<List<String>> result = new ArrayList<>();public List<List<String>> solveNQueens(int n) {char[][] chessboard2 = new char[n][n];for (char[] c:chessboard2){Arrays.fill(c,'.');}backtracking(n, 0, chessboard2);return result;}void backtracking (int n, int row, char[][] chessboard){if (row == n) {result.add (Array2List(chessboard));return;}for (int col=0; col<n; col++){if (isValid(col, row, n, chessboard)) {chessboard[row][col] = 'Q';backtracking(n, row+1, chessboard);chessboard[row][col] = '.';}}}boolean isValid(int col, int row, int n, char[][] chessboard){//同列for (int i=0; i<row; i++){if (chessboard[i][col] == 'Q')  return false;}//同行for (int i=0; i<col; i++){if (chessboard[row][i] == 'Q') return false;}//45度for (int i=row-1, j= col-1 ; i>=0 && j>=0; i--, j--){if (chessboard[i][j] == 'Q') return false;}   //135度for (int i=row-1, j= col+1;  i>=0 && j<n; i--, j++){if (chessboard[i][j] == 'Q') return false;} return true; }List Array2List(char[][] chessboard) {List<String> list = new ArrayList<>();for (char[] c : chessboard) {list.add(String.copyValueOf(c));}return list;}}

注意:

(1)想要将二维字符数组转换为 List<List<String>> 的格式。需要编写一个方法(Array2List)来实现这一转换。

(2)在 Java 中,字符的比较应该使用单引号而不是双引号。因此,应该使用单引号`'Q'`和`'.'`来比较而不是`"Q"``"."`

时间空间复杂度:

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

骨传导蓝牙耳机什么牌子好用?为你揭晓不踩雷的骨传导耳机排行

喜欢运动的朋友们&#xff0c;你们一定不能错过骨传导耳机&#xff01;它真的是我们运动时的好帮手。为什么这么说呢&#xff1f;因为它不会像普通耳机那样塞住我们的耳朵&#xff0c;让我们在运动时感觉不舒服&#xff0c;甚至伤害耳朵。而且&#xff0c;它还可以帮助我们听到…

QT+OSG/osgEarth编译之六十七:dds+Qt编译(一套代码、一套框架,跨平台编译,版本:OSG-3.6.5插件库osgdb_dds)

Qt+OSG/osgEarth跨平台编译(用Qt Creator组装各个库,实现一套代码、一套框架,跨平台编译)_qt + osgearth安装-CSDN博客 目录 1、dds介绍 2、文件分析 3、pro文件 4、编译实践 <

go 使用 sync.RWMutex

使用 sync.RWMutex 简介使用注意点 简介 简述读写锁的使用&#xff0c;以及注意点 使用 在读操作的时候 加读锁&#xff0c; 在写操作的时候加写锁&#xff0c; 举例: 多个协程需要读取、写入的操作 // 读操作 func reader(id int) {for {rwMutex.RLock()fmt.Printf("R…

如何选择适用于光束分析应用的工业相机?

为光束质量分析系统选择合适的相机时&#xff0c;需要考虑许多关键特性。例如&#xff1a; ◈ 合适的波长范围&#xff1a;支持准确拍摄和测量所需波长的光束。 ◈ 高空间分辨率&#xff1a;更好地分析光束特征&#xff0c;如光束宽度、形状和强度分布。 ◈ 合适的传感器尺寸…

ClickHouse基础知识(七):ClickHouse的分片集群

副本虽然能够提高数据的可用性&#xff0c;降低丢失风险&#xff0c;但是每台服务器实际上必须容纳全量数据&#xff0c;对数据的横向扩容没有解决。 要解决数据水平切分的问题&#xff0c;需要引入分片的概念。通过分片把一份完整的数据进行切 分&#xff0c;不同的分片分布到…

Sectigo和Certum的区别

为了保护用户在互联网的隐私&#xff0c;网站使用SSL数字证书为http明文传输协议加上安全套接层&#xff0c;对网站传输数据加密。Sectigo和Certum是正规的CA认证机构&#xff0c;它们颁发的SSL证书经过市场认证&#xff0c;已经兼容大多数浏览器以及终端&#xff0c;今天就随S…

SSH 连接与RDP连接

SSH 连接 配置 Linux 上的 SSH 服务: 在 Linux 系统上&#xff0c;您需要确保安装并启动 SSH 服务器&#xff08;通常是 OpenSSH&#xff09;。您需要知道 Linux 机器的 IP 地址和 SSH 服务的端口号&#xff08;默认是 22&#xff09;。 在 Windows 上使用 SSH 客户端: 您可以…

令人吃惊的SLM34x系列SLM340CK-DG 通过国际安全标准兼容光耦的单通道隔离驱动器

40V, 1A兼容光耦的单通道隔离驱动器SLM34x系列SLM340CK-DG产品已通过UL1577认证&#xff0c;通过UL1577安规标准的认可&#xff0c;意味着产品已符合相关的国际安全标准&#xff0c;在产品质量及可靠性上。 关于UL1577科普&#xff1a; UL1577规范适用于光隔离器、磁隔离器以…

同城拼车约车顺风车/同城顺风车小程序/顺风车小程序/拼车小程序

同城拼车约车顺风车/同城顺风车小程序/顺风车小程序/拼车小程序 演示小程序搜索:上车信息 可以打开封装APP 套餐一:源码+包安装+包过审(无需许可证)=300 套餐二:全包服务 包服务器+域名+APP+免费认证小程序+H5+PC=800 包审核 PC端联系客服看 PC端+H5+公众号+小程序…

深度生成模型之自编码器与变分自编码器 ->(个人学习记录笔记)

文章目录 深度生成模型之自编码器与变分自编码器自编码器AE1. 定义2. 自编码器的应用 变分自编码器(VAE)1. 理论求解2. 模型求解3. 优化目标4. 再参数化策略 AE与VAE的对比AE与VAE的主要局限性 深度生成模型之自编码器与变分自编码器 自编码器AE 1. 定义 Auto-Encoder&#…

线性代数_对角矩阵

对角矩阵是线性代数中一种特殊的矩阵类型&#xff0c;它在数学理论和实际应用中都有着重要的地位。对角矩阵的定义如下&#xff1a; 设 \( A \) 是一个 \( n \times n \) 的方阵&#xff0c;如果满足除主对角线上的元素外&#xff0c;其他元素都为零&#xff0c;即 \( A_{ij} …

C语言---扫雷(Minesweeper)

扫雷 1 了解扫雷游戏1.1 基本规则1.2 基础知识1.2.1字符相减 2 实现过程1.1 棋盘设定1.2 初始化棋盘1.3 打印棋盘1.4 放置雷1.5 排查雷1.6 game()函数 3 完整代码3.1 Minesweeper.h3.2 Minesweeper.c3.3 Test.c 4 参考 1 了解扫雷游戏 点击右侧进入扫雷游戏网页版 1.1 基本规…

java idea中做一个简易的图书管理系统(控制台输入输出,无数据库)

1&#xff1a;先创建增删改查四个接口 &#xff08;1&#xff09;QueryBook查询接口 package com.by.dao;import com.by.entity.Book;public interface QueryBook {/*** 查询所有图书信息* param bs*/void selectBook(Book[] bs);/*** 根据名字查询一个图书信息* param bookN…

探秘AI数字人克隆系统OEM源码:实现24小时无人值守直播间的奥秘

随着人工智能技术的不断发展&#xff0c;AI数字人克隆系统OEM源码正在引起广泛的关注。其中&#xff0c;实现24小时无人值守直播间成为了许多企业和机构的追求。本文将深入探讨如何利用AI数字人克隆系统OEM源码实现24小时无人值守直播间&#xff0c;并揭示其背后的奥秘。 一、…

【Linux操作系统】探秘Linux奥秘:Linux开发工具的解密与实战

&#x1f308;个人主页&#xff1a;Sarapines Programmer&#x1f525; 系列专栏&#xff1a;《操作系统实验室》&#x1f516;诗赋清音&#xff1a;柳垂轻絮拂人衣&#xff0c;心随风舞梦飞。 山川湖海皆可涉&#xff0c;勇者征途逐星辉。 目录 &#x1fa90;1 初识Linux OS &…

ChatGPT的基本原理?

ChatGPT基于GPT&#xff08;Generative Pre-trained Transformer&#xff09;架构&#xff0c;是由OpenAI开发的一种自然语言处理模型。以下是ChatGPT的基本原理的介绍&#xff1a; 1、预训练&#xff08;Pre-training&#xff09;&#xff1a; ChatGPT首先经过大规模的语言预…

Nginx解决跨域问题过程

学习Nginx解决跨域问题 结果 server {listen 22222;server_name localhost;location / {if ($request_method OPTIONS) {add_header Access-Control-Allow-Origin http://localhost:8080;add_header Access-Control-Allow-Headers *;add_header Access-Control-Allo…

redis 从0到1完整学习 (十四):RedisObject 之 ZSet 类型

文章目录 1. 引言2. redis 源码下载3. redisObject 管理 ZSet 类型的数据结构4. 参考 1. 引言 前情提要&#xff1a; 《redis 从0到1完整学习 &#xff08;一&#xff09;&#xff1a;安装&初识 redis》 《redis 从0到1完整学习 &#xff08;二&#xff09;&#xff1a;re…

学习记录——BiFormer

BiFormer Vision Transformer with Bi-Level Routing Attention BiFormer:具有双电平路由注意的视觉变压器 摘要作为视觉转换器的核心组成部分,注意力是捕捉长期依赖关系的有力工具。然而,这样的能力是有代价的:当计算跨所有空间位置的成对令牌交互时,它会产生巨大的计算负…

如何理解图卷积网络GCN

文章目录 基本概念度矩阵&#xff08;degree&#xff09;邻接矩阵&#xff08;Adjacency&#xff09; 理解GCN两层GCN网络层数设置 搭建GCN网络定义GCN层定义GCN网络 基本概念 图的一些基本知识&#xff1a;图&#xff0c;邻居&#xff0c;度矩阵&#xff0c;邻接矩阵 度矩阵…