当前位置: 首页 > news >正文

【回溯】BM59-N皇后问题

思路

求解代码

privateintans=0;/** * 解决N皇后问题的主方法,初始化棋盘并调用回溯方法 * * @param n 棋盘的大小和皇后的数量 * @return 返回解的总数 */publicintNqueen(intn){// 创建一个长度为n的数组pos,用于记录每一行中皇后所在的列位置// 初始时所有位置都设为0int[]pos=newint[n];Arrays.fill(pos,0);// 调用回溯方法开始求解N皇后问题backtrack(n,0,pos);// 返回最终找到的解的总数returnans;}/** * 检查在指定位置放置皇后是否有效 * * @param pos 数组,记录每一行皇后所在的列位置 * @param row 当前行号 * @param col 当前列号 * @return 如果当前位置可以放置皇后则返回true,否则返回false */privatebooleanisValid(int[]pos,introw,intcol){// 遍历之前所有已经放置了皇后的行for(inti=0;i<row;i++){// 检查是否有同列的皇后,或者两个皇后是否在同一对角线上if(pos[i]==col||Math.abs(row-i)==Math.abs(col-pos[i])){// 如果冲突,返回falsereturnfalse;}}// 如果没有冲突,返回truereturntrue;}/** * 使用回溯算法解决N皇后问题 * * @param n 棋盘大小,即n×n的棋盘 * @param row 当前行号,从0开始 * @param pos 记录每行皇后放置的位置,pos[i]表示第i行皇后所在的列 */privatevoidbacktrack(intn,introw,int[]pos){// 如果已经处理完所有行,说明找到了一个有效的解if(row==n){ans++;// 解的数量加1return;// 返回上一行}// 遍历当前行的所有列for(inti=0;i<n;i++){// 检查在当前行的第i列放置皇后是否有效if(isValid(pos,row,i)){pos[row]=i;// 将皇后放置在当前行的第i列// 递归处理下一行backtrack(n,row+1,pos);}// 如果无效,则尝试下一列}}

小贴士

1.pos[i]==col||Math.abs(row-i)==Math.abs(col-pos[i]这个校验逻辑为什么是这样?

主要是因为回溯是逐行递归,一行只放一个皇后,天然规避同行冲突,所以这里没有写i==row;

然后利用了对角线的数学判定公式:

两个皇后的【行号差值的绝对值】 = 【列号差值的绝对值】➡️必在同一条对角线上

2.在 N 皇后问题中,行不会重复选(遍历规则)、列不会重复选(校验规则),used数组的使命已经被替代,所以不需要写used数组。

3.本题的回溯为什么不需要显式写撤销代码?

做选择时只修改了当前层级专属的变量,且变量会被下一次循环自动覆盖,覆盖之后,旧值就消失了,相当于恢复成了原始状态

http://www.jsqmd.com/news/549304/

相关文章:

  • IndexTTS-2-LLM语音生成延迟高?CPU算力优化实战指南
  • Cogito-V1-Preview-Llama-3B入门到精通:STM32F103C8T6最小系统板项目开发辅助
  • 硬件知识总结梳理-5(二极管)
  • 别再让模型路径打架了!手把手教你用Simulink Project管理多项目(附MATLAB 2023b实操)
  • 3分钟快速上手:Greasy Fork用户脚本终极安装与管理指南
  • 2026年灭火毯品牌推荐:餐饮店铺消防合规热门款式对比分析 - 十大品牌推荐
  • 智能驾驶中的惯性导航:从L2到L4的IMU选型指南(2023最新)
  • 告别手动配置,用快马一键生成wsl安装ubuntu全自动脚本
  • 快马平台三分钟搭建数据库应用原型:以员工管理系统为例
  • 告别鼠标拖拽:用Mermaid重新定义技术图表创作流程
  • 能耗监控系统:OpenClaw+GLM-4-7-Flash分析家庭用电报告
  • 2026减脂代餐选购指南:主流产品实测,聚焦营养代谢与长效体重管理 - 企业推荐官【官方】
  • Phi-4-Reasoning-Vision镜像免配置:Streamlit界面+双卡自动分配开箱即用
  • 【量化建模】从布朗运动到维纳过程:金融随机模型的数学基石
  • 灭火毯品牌如何选更安全?2026年靠谱推荐餐饮后厨用耐高温型号 - 十大品牌推荐
  • Qwen3-0.6B-FP8实战案例:用Qwen3-0.6B-FP8构建校园知识问答机器人
  • Mermaid:文本驱动的数据可视化效率革命与全场景适配指南
  • 常见开源软件协议介绍
  • 小米AX3000路由器SSH权限获取与系统优化指南
  • ASU-CSE466-计算机系统安全笔记-全-
  • 华为,华三交换机开启snmp的命令
  • 超越本地编辑器:用快马AI实现智能批量处理与代码重构,极致提升效率
  • 3月评测揭秘:市场做得好的xrf公司有哪些?xrf机构优选品牌推荐与解析 - 品牌推荐师
  • ntp服务器厂家如何选不踩坑?2026年靠谱推荐海外项目与多卫星系统适配型号 - 十大品牌推荐
  • 大比表氧化铈:催化与净化的新利器
  • 2026装配式轻钢/快装/免焊龙骨优质源头供应商5大排名 禹途新材TOP1!采购不踩坑 - 企业推荐官【官方】
  • WarcraftHelper:魔兽争霸III终极优化指南 - 5分钟解决所有显示与性能问题
  • 可靠的不锈钢电焊网厂家、钢筋网片工厂怎么联系、联系方式 - 企业推荐官【官方】
  • 终极指南:使用开源自动化工具OpCore Simplify快速配置黑苹果
  • 预算有限又想出大片?揭秘这家“央媒级”品质、价格亲民的制作公司 - 企业推荐官【官方】