网站空间1深圳龙岗设计
web/
2025/9/27 2:19:28/
文章来源:
网站空间1,深圳龙岗设计,企业怎么做网络推广,dw网页制作成品12页n 皇后问题
研究的是如何将 n 个皇后放置在 n n 的棋盘上#xff0c;并且使皇后彼此之间不能相互攻击。
给你一个整数 n #xff0c;返回 n 皇后问题 不同的解决方案的数量。
示例 1#xff1a; 输入#xff1a;n 4
输出#xff1a;2
解释#xff1a;如上图所示并且使皇后彼此之间不能相互攻击。
给你一个整数 n 返回 n 皇后问题 不同的解决方案的数量。
示例 1 输入n 4
输出2
解释如上图所示4 皇后问题存在两个不同的解法。示例 2
输入n 1
输出1提示
1 n 9
代码如下链接也可以看下文大家请帮忙点赞收藏谢谢。
N皇后en.lua https://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 https://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/web/82490.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!