N 皇后 - 蓝桥杯?-Lua 中文代码解题第6题

n 皇后问题

研究的是如何将 n 个皇后放置在 n × n 的棋盘上,并且使皇后彼此之间不能相互攻击。

给你一个整数 n ,返回 n 皇后问题 不同的解决方案的数量。

示例 1:

输入:n = 4
输出:2
解释:如上图所示,4 皇后问题存在两个不同的解法。

示例 2:

输入:n = 1
输出:1

提示:

  • 1 <= n <= 9

代码如下链接,也可以看下文,大家请帮忙点赞,收藏,谢谢。

N皇后en.lua icon-default.png?t=N7T8https://gitcode.com/funsion/CLua/blob/master/%E8%93%9D%E6%A1%A5%E6%9D%AFlua%E4%B8%AD%E6%96%87%E8%A7%A3%E6%B3%95/N%E7%9A%87%E5%90%8Een.luaN皇后中文.lua icon-default.png?t=N7T8https://gitcode.com/funsion/CLua/blob/master/%E8%93%9D%E6%A1%A5%E6%9D%AFlua%E4%B8%AD%E6%96%87%E8%A7%A3%E6%B3%95/N%E7%9A%87%E5%90%8E%E4%B8%AD%E6%96%87.lua

解题思路如下:

1. 初始化棋盘

首先,我们创建一个大小为 n×n 的二维数组(即“棋盘”),其中每个元素初始值为假,表示该位置尚未放置皇后。这样就构建了一个空白的棋盘模型。

2. 回溯算法

使用回溯算法来搜索所有可能的皇后放置方案。回溯算法是一种递归地尝试解决问题的方法,当发现当前路径不可行时,会退回至上一步状态,尝试其他可能性。在这个问题中,我们从棋盘的第一行开始,逐行尝试在每一列放置皇后。具体步骤如下:

  • 当放置完 n 个皇后(即行数达到 n)时,找到一个解,将当前棋盘状态添加到解法集中。
  • 对于当前行,遍历所有列,检查在该列放置皇后是否安全。若安全,则在该位置放置皇后,并递归地进入下一行继续放置皇后。
  • 若在下一行无法继续放置皇后(即所有列都不安全),则回溯至上一行的前一列,尝试在该列放置皇后。
  • 当回溯至第一行仍无法找到安全的列放置皇后时,说明当前路径无法生成有效解,需要返回至上一层递归,撤销上一行最后一个皇后的位置,然后尝试其前一列。
3. 安全性判断

判断某一位置(行 r,列 c)是否可以安全放置皇后,需满足以下三个条件:

  • 当前列(c)上无皇后:检查从第一行到当前行(r-1)的所有同列位置,确保无皇后。
  • 左上到右下对角线上无皇后:计算该对角线的起始列(c - r + 1),检查从第一行到当前行(r-1)的所有同对角线位置,确保无皇后。
  • 右上到左下对角线上无皇后:计算该对角线的起始列(c + r - 1),检查从第一行到当前行(r-1)的所有同对角线位置,确保无皇后。

只有当这三个条件都满足时,该位置才被视为安全,可以放置皇后。

4. 输出解集

最后,遍历解法集中存储的所有解(即棋盘状态),并输出它们。这些解即为 n 皇后问题的所有有效解。

综上所述,这段代码通过初始化棋盘、采用回溯算法搜索解空间、判断皇后放置安全性以及输出解集,有效地解决了 n 皇后问题。

如果要输出解法数量怎么写呢?请评论区回复。
函数 解皇后(n)局部 空棋盘 = {} -- 初始化一个空棋盘因为 i = 1, n 做空棋盘[i] = {}因为 j = 1, n 做空棋盘[i][j] = 假 -- 初始状态下,每个格子都没有皇后结束结束局部 解法集 = {} -- 存放所有解的容器局部 函数 回溯(行)如果 行 > n 即 -- 如果已经放置了 N 个皇后,找到一个解局部 行内容 = ""因为 r = 1, n 做因为 c = 1, n 做行内容 = 行内容 .. (空棋盘[r][c] 与 "凤 " 或 "囗 ")结束行内容 = 行内容 .. "\n"结束表.insert(解法集, 行内容)返回结束因为 列 = 1, n 做 -- 依次尝试在当前行的每个列放置皇后如果 安全吗(行, 列, 空棋盘) 即空棋盘[行][列] = 真 -- 放置皇后回溯(行 + 1) -- 继续在下一行放置皇后空棋盘[行][列] = 假 -- 回溯:撤销当前行的皇后放置结束结束结束函数 安全吗(行, 列, 空棋盘)-- 检查当前列是否有皇后因为 r = 1, 行 - 1 做如果 空棋盘[r][列] 即返回 假结束结束-- 检查左上到右下的对角线是否有皇后局部 左上对角线 = 列 - 行 + 1因为 r = 1, 行 - 1 做局部 c = 左上对角线 + r如果 c <= n 与 空棋盘[r][c] 即返回 假结束结束-- 检查右上到左下的对角线是否有皇后局部 右上对角线 = 列 + 行 - 1因为 r = 1, 行 - 1 做局部 c = 右上对角线 - r如果 c >= 1 与 空棋盘[r][c] 即返回 假结束结束返回 真 -- 当前位置可以安全放置皇后结束回溯(1) -- 从第一行开始放置皇后返回 解法集
结束-- 示例:求解 4 皇后问题
局部 解法集 = 解皇后(4)
因为 _, 解法 属于 序配(解法集) 做输出(解法)
结束

表格还没完成汉化,所以还是用英文 。

这段代码运行后将会输出:

凤 囗 囗 囗
囗 凤 囗 囗
囗 囗 凤 囗
囗 囗 囗 凤

--------------

凤 囗 囗 囗
囗 囗 囗 凤
囗 囗 凤 囗
囗 凤 囗 囗

--------------

囗 凤 囗 囗
凤 囗 囗 囗
囗 囗 囗 凤
囗 囗 凤 囗

--------------

囗 凤 囗 囗
囗 囗 凤 囗
囗 囗 囗 凤
凤 囗 囗 囗

--------------

囗 囗 凤 囗
囗 凤 囗 囗
凤 囗 囗 囗
囗 囗 囗 凤

--------------

囗 囗 凤 囗
囗 囗 囗 凤
凤 囗 囗 囗
囗 凤 囗 囗

--------------

囗 囗 囗 凤
凤 囗 囗 囗
囗 凤 囗 囗
囗 囗 凤 囗

--------------

囗 囗 囗 凤
囗 囗 凤 囗
囗 凤 囗 囗
凤 囗 囗 囗

我将“皇后”用凤凰来代表一下。这是不是很生动。

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

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

相关文章

VBA 制作二维码

假设从B1单元格取值&#xff0c;在A1单元格中生成二维码&#xff0c; 那么&#xff0c;代码如下↓ Sub genBarCode()清除已有二维码Call clearBarCodeWith ActiveSheet.OLEObjects.Add(ClassType:"BARCODE.BarCodeCtrl.1").Object.Style 11 二维码样式.Object.V…

模拟退火遗传算法GASA-附MATLAB代码

模拟退火遗传算法&#xff08;Simulated Annealing Genetic Algorithm&#xff0c;SAGA&#xff09;结合了模拟退火算法&#xff08;Simulated Annealing&#xff0c;SA&#xff09;和遗传算法&#xff08;Genetic Algorithm&#xff0c;GA&#xff09;的优点&#xff0c;用于解…

支持向量机(SVM)白话之个人理解(学习记录)

本文仅有文字理解部分&#xff0c;没有相应的数学公式推导过程&#xff0c;便于新手理解。 一、什么是支持向量机 首先我们看下面这张图&#xff0c;在图中圆形和三角形分别代表不同的数据类型&#xff0c;如何画出一条直线使两者能够显著地区分开来呢&#xff1f; 答案可以多…

分类预测 | Matlab实现ABC-LSSVM人工蜂群算法优化最小二乘支持向量机数据分类预测

分类预测 | Matlab实现ABC-LSSVM人工蜂群算法优化最小二乘支持向量机数据分类预测 目录 分类预测 | Matlab实现ABC-LSSVM人工蜂群算法优化最小二乘支持向量机数据分类预测分类效果基本介绍程序设计参考资料 分类效果 基本介绍 1.Matlab实现ABC-LSSVM人工蜂群算法优化最小二乘支…

Web服务器架构设计(学习笔记)

软件架构风格 质量属性与架构评估 Web架构综合考察 什么叫做架构风格&#xff1f;又有哪些架构风格&#xff1f;不同的架构风格的优劣如何? 有哪些层次的负载均衡实现&#xff1f;优劣如何&#xff1f; 有哪些层面的集群切片实现&#xff1f; 什么叫做小前端&#xff0c…

大屏可视化展示平台解决方案(word原件获取)

1.系统概述 1.1.需求分析 1.2.重难点分析 1.3.重难点解决措施 2.系统架构设计 2.1.系统架构图 2.2.关键技术 2.3.接口及要求 3.系统功能设计 3.1.功能清单列表 3.2.数据源管理 3.3.数据集管理 3.4.视图管理 3.5.仪表盘管理 3.6.移动端设计 3.1.系统权限设计 3.2.数据查询过程设…

Leetcode算法训练日记 | day23

一、修剪二叉搜索树 1.题目 Leetcode&#xff1a;第 669 题 给你二叉搜索树的根节点 root &#xff0c;同时给定最小边界low 和最大边界 high。通过修剪二叉搜索树&#xff0c;使得所有节点的值在[low, high]中。修剪树 不应该 改变保留在树中的元素的相对结构 (即&#xff…

LeetCode 142.环形链表II(数学公式推导)

给定一个链表的头节点 head &#xff0c;返回链表开始入环的第一个节点。 如果链表无环&#xff0c;则返回 null。 如果链表中有某个节点&#xff0c;可以通过连续跟踪 next 指针再次到达&#xff0c;则链表中存在环。 为了表示给定链表中的环&#xff0c;评测系统内部使用整…

腾讯云4核8G服务器多少钱?4核8G能干啥?

腾讯云4核8G服务器多少钱&#xff1f;腾讯云4核8G轻量应用服务器12M带宽租用价格646元15个月&#xff0c;活动页面 txybk.com/go/txy 活动链接打开如下图所示&#xff1a; 腾讯云4核8G服务器优惠价格 这台4核8G服务器是轻量应用服务器&#xff0c;详细配置为&#xff1a;轻量4核…

如何在Flutter应用中配置ipa Guard进行混淆

在移动应用开发中&#xff0c;保护应用代码安全至关重要。Flutter 提供了简单易用的混淆工具&#xff0c;帮助开发者在构建 release 版本应用时有效保护代码。本文将介绍如何在 Flutter 应用中使用混淆&#xff0c;并提供了相关的操作步骤和注意事项。 &#x1f4dd; 摘要 本…

【每日刷题】Day10

【每日刷题】Day10 &#x1f955;个人主页&#xff1a;开敲&#x1f349; &#x1f525;所属专栏&#xff1a;每日刷题&#x1f345; 目录 1. 环形链表的约瑟夫问题_牛客题霸_牛客网 (nowcoder.com) 2. 21. 合并两个有序链表 - 力扣&#xff08;LeetCode&#xff09; 3. 152…

Python中的错误处理 - 使用try、except、else和finally进行解释,并附带代码示例

最近&#xff0c;我的经理委派我创建一个自动报告。我设计的报告非常简单。它包括一些来自数据库的数字和一些基本的数学运算。我很兴奋最终可以向公司展示我的惊人的Python技能。 我完成并交付了产品。一切都很顺利。至少&#xff0c;直到大约两周后。我的报告由于除以零错误…

AGILEFORMER:用于医学图像分割的空间敏捷 Transformer UNET

AGILEFORMER&#xff1a;用于医学图像分割的空间敏捷 Transformer UNET 摘要IntroductionMethodDeformable Patch Embedding2.1.1 Rigid patch embedding2.1.2 Deformable patch embedding Spatially Dynamic Self-AttentionDeformable Multi-head Self-Attention (DMSA)Neighb…

[Mac]安装App后“XX已损坏,无法打开“

问题&#xff1a; “xx.app”已损坏&#xff0c;无法打开。你应该将它移到废纸篓。 解决&#xff1a; 终端输入sudo xattr -r -d com.apple.quarantine 后将Applications中对应的问题app拖入生成路径&#xff0c;然后执行。 $ sudo xattr -r -d com.apple.quarantine /Appli…

StarRocks实战——华米科技埋点分析平台建设

目录 前言 一、原有方案及其痛点 二、引入StarRocks 三、方案改造 3.1 架构设计 3.2 数据流程 3.3 性能指标 3.4 改造收益 前言 华米科技是一家基于云的健康服务提供商&#xff0c;每天都会有海量的埋点数据&#xff0c;以往基于HBase建设的埋点计算分析项目往往效率上…

基于微信小程序的自习室预约系统的设计与实现

个人介绍 hello hello~ &#xff0c;这里是 code袁~&#x1f496;&#x1f496; &#xff0c;欢迎大家点赞&#x1f973;&#x1f973;关注&#x1f4a5;&#x1f4a5;收藏&#x1f339;&#x1f339;&#x1f339; &#x1f981;作者简介&#xff1a;一名喜欢分享和记录学习的…

OJ 【难度1】【Python】完美字符串 扫雷 A-B数对 赛前准备 【C】精密计时

完美字符串 题目描述 你可能见过下面这一句英文&#xff1a; "The quick brown fox jumps over the lazy dog." 短短的一句话就包含了所有 2626 个英文字母&#xff01;因此这句话广泛地用于字体效果的展示。更短的还有&#xff1a; "The five boxing wizards…

【学习】软件测试中,我们为什么要进行系统测试

软件测试中的系统测试是一个关键环节&#xff0c;它主要是通过测试整个系统来验证软件是否满足需求规格说明书中的要求。在软件开发周期的后期&#xff0c;系统测试扮演着非常重要的角色&#xff0c;因为它可以发现并纠正软件中存在的错误和缺陷&#xff0c;确保软件的质量和稳…

【数据结构】双向链表 C++

一、什么是双向链表 1、定义 双向链表也叫双链表&#xff0c;是链表的一种&#xff0c;它的每个数据结点中都有两个指针&#xff0c;分别指向直接后继和直接前驱。所以&#xff0c;从双向链表中的任意一个结点开始&#xff0c;都可以很方便地访问它的前驱结点和后继结点。 双…

虹科Pico汽车示波器 | 免拆诊断案例 | 2011款东风悦达起亚K5车发动机偶尔起动困难

一、故障现象 一辆2011款东风悦达起亚K5车&#xff0c;搭载G4KD发动机&#xff0c;累计行驶里程约为24.5万km。车主反映&#xff0c;第1次起动发动机时偶尔无法起动着机&#xff0c;第2次能够正常起动着机&#xff0c;但发动机故障灯异常点亮。为此在其他维修厂维修过&#xf…