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.mzph.cn/news/808015.shtml

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

相关文章

吴恩达2022机器学习专项课程(一) 5.2 向量化(1) 5.3 向量化(2)

问题预览/关键词 什么是向量化&#xff1f;向量化的好处是&#xff1f;如何向量化多元线性回归函数的参数&#xff1f;如何在Python中向量化参数&#xff1f;计算机底层是如何计算向量化的&#xff1f;向量化示例 笔记 1.向量化 一种在数学和计算中广泛使用的概念&#xff…

[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…

备战蓝桥杯(日益更新)(刷题)

备战蓝桥杯&#xff08;日益更新&#xff09;&#xff08;刷题&#xff09; 文章目录 备战蓝桥杯&#xff08;日益更新&#xff09;&#xff08;刷题&#xff09;前言&#xff1a;一、二分&#xff1a;1. acwing503 借教室&#xff1a;&#xff08;二分 差分&#xff09;2. ac…

Socks5代理IP如何使用?详细教程解析

当我们在互联网上浏览网页、下载文件或者进行在线活动时&#xff0c;隐私和安全问题常常被提及。在这样的环境下&#xff0c;一个有效的解决方案是使用Sock5IP。本教程将向您介绍Sock5IP的使用方法&#xff0c;帮助您保护个人隐私并提升网络安全。 一、什么是Sock5IP&#xff1…

Mybatis-Plus使用入门

Mybatis-Plus 一、Mybatis-plus的简介 官方文档的地址&#xff1a; MyBatis-Plus &#xff08;一&#xff09;什么是Mybatis-Plus Mybatis-Plus是一个Mybatis&#xff08;opens new window&#xff09;的增强工具&#xff0c;在Mybatis的基础上只做增强不做改变&#xff0c…

ChatGPT在日常生活与工作中的应用,以及Hulu AI 的探索之旅

ChatGPT在日常生活与工作中的应用&#xff0c;以及Hulu AI 的探索之旅 &#x1f4ac;ChatGPT 的多面应用&#x1f4ac;Hulu AI&#xff1a;一个AI工具聚合平台的探索平台优势为何选择Hulu AI&#xff1f;珍稀优惠 &#x1f4ac;结束语 在数字化快速发展的当下&#xff0c;人工智…

冯喜运:4.11外汇黄金原油晚间行情分析及独家作家操作建议

【 黄金消息面分析】&#xff1a;周四(4月11日)亚市早盘&#xff0c;现货黄金窄幅震荡&#xff0c;周三金价从纪录高位下滑&#xff0c;盘中一度失守2320关口至2319.一线&#xff0c;收报2333附近&#xff0c;因此前强于预期的通胀数据削弱了美国提前降息的预期&#xff0c;美元…

Python初级第二次作业

一、 def reverse(num):anumt0b0cnumwhile a//10>0:if a%10>0:t1aa//10print(t)for i in range(t,-1,-1):if c%100:b0else:b(c%10)*(10**i)c//10print(b) if bnum:return Trueelse:return Falsedef isPalind(num):kreverse(num)if kTrue:print(f"{num}是回文&…

uniapp 轮播列表一排展示3个,左右滑动,滑动到中间放大

一、效果展示 二、代码实现 1.html代码&#xff1a; <!-- 轮播 --><view class"heade"><swiper class"swiper" display-multiple-items3 circulartrue previous-margin1rpx next-margin1rpxcurrent0 change"swiperChange">&l…

书生·浦语2.0(InternLM2)大模型实战--Day02 茴香豆 | 搭建RAG智能助理

视频地址&#xff1a;https://www.bilibili.com/video/BV1QA4m1F7t4/文档地址&#xff1a;https://github.com/InternLM/Tutorial/blob/camp2/huixiangdou/readme.md作业地址&#xff1a;https://github.com/InternLM/Tutorial/blob/camp2/huixiangdou/homework.md RAG 概述 R…

汇舟问卷:海外问卷怎么做?

最近美元升值了&#xff0c;但是想在国内赚取美金的途径很少&#xff0c;大多数人接触不到赚取美金的机会。目前汇舟问卷做的国外问卷调查就是一个赚取美金的机会。 操作步骤也比较简单&#xff0c;只需要先搭建好国外的ip环境&#xff0c;然后创建对应国家的人设&#xff0c;…

C语言 知识点 + 笔记(2w6千字 持续更新...)

前言 本篇以笔记为主的C语言详解,全篇一共十章内容,2万6千多字,会持续更新基础内容,争取做到更详细。多一句没有,少一句不行! 形而上学者谓之道,形而下学者谓之器 第 1 章 C语言的流程 (1) C程序经历的六个阶段 编辑(Edit)预处理(Preprocess)编译(Compile)汇编(Assemb…

Prometheus实现自定义脚本监控

#Prometheus# 监控路漫漫其修远兮&#xff0c;吾将上下而求索&#xff01; 一、前言 在监控工作过程中经常会收到大量的定制化的监控需求&#xff0c;Prometheus就提供了一个很强大的组件 --> Pushgateway&#xff0c;他不仅是网关的用途接收exporter的数据&#xff0c;还…

Docker 安装MySql并操作日志

一、在Linux系统里新建这几个文件夹 1.1 在conf.d文件夹下新建一个my.cnf文件 1.2 用vscode 打开&#xff08;防止乱码&#xff09;&#xff0c;复制以下内容 [mysqld] log_timestampsSYSTEM default-time-zone8:00server-id1log-binmysql-binbinlog-do-db mall # 要监听的库…

Freemarker 的配置

Freemarker是一种用于生成动态模板的Java模板引擎。它可以将数据与模板文件结合&#xff0c;生成最终的输出内容。以下是使用Freemarker的实现和配置步骤&#xff1a; 引入Freemarker库&#xff1a;首先需要将Freemarker库添加到项目的依赖中。可以通过在Maven或Gradle中添加相…

如何本地搭建Discuz论坛并实现无公网IP远程访问

文章目录 前言1.安装基础环境2.一键部署Discuz3.安装cpolar工具4.配置域名访问Discuz5.固定域名公网地址6.配置Discuz论坛 前言 Crossday Discuz! Board&#xff08;以下简称 Discuz!&#xff09;是一套通用的社区论坛软件系统&#xff0c;用户可以在不需要任何编程的基础上&a…

GlusterFS(GFS)分布式文件系统

一、GlusterFS的概述&#xff1a; GlusterFS 是一个开源的分布式文件系统。 只在扩展存储容器&#xff0c;提高性能 并且通过多个互联网络的存储节点的进行几余&#xff0c;以确保数据的可用性和一致性 由存储服务器、客户端以及NFS/Samba 存储网关&#xff08;可选&#xff0c…

C#关于 InputSimulator的用法

InputSimulator 是一个 C# 库&#xff0c;它提供了模拟键盘和鼠标输入的功能&#xff0c;可以方便地在代码中模拟用户的键盘按键和鼠标操作。这在自动化测试、模拟用户操作等场景下非常有用。 使用 InputSimulator 非常简单&#xff0c;只需要几行代码就可以实现模拟输入的功能…

小娱xiaoyu xy-c5 路由器 刷机openwrt

1、刷固件openwrt 顾虑到可能要安装cups&#xff08;打印服务器&#xff09;只支持19版本以下的&#xff0c;所以只能安装19的版本&#xff0c;官网没有找到&#xff0c;都是21以上的&#xff0c;所以我只能到外面找玩家自己编译的了。 我这次刷的包是来源于这里&#xff1a;h…