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

2025年- H98-Lc206--51.N皇后(回溯)--Java版

1.题目描述

在这里插入图片描述
在这里插入图片描述

2.思路

二维数组集合
(1)N皇后规则
1)不能同行(同一行不能出现2个皇后)
2)不能同列(同一列不能出现2个皇后)
3)不能说45度或135度(斜对角线不能出现2个皇后)

n代表树高,也就是嵌套for循环的行数

3.代码实现

class Solution {public List<List<String>> solveNQueens(int n) {//三维结果数组,用于存储最终所有符合条件的解法。List<List<String>> result=new ArrayList<>();//初始化一个 n x n 的棋盘,用字符数组表示char[][] board=new char[n][n];//先构建棋盘,用.填满,表示该位置为空。for(int i=0;i<n;i++){for(int j=0;j<n;j++){board[i][j]='.';}}//1.确定递归函数的参数backTracking(result,board,0,n);return result;}   //1.确定递归函数的参数//    - solutions: 存储所有解法的列表。//    - board: 当前的棋盘状态。//    - row: 当前正准备放置皇后的行号。从第 0 行开始,调用回溯函数//    - n: 棋盘的大小。//     void backTracking(private void backTracking(List<List<String>>result,char[][]board,int row,int n){//2.确定终止条件,遍历到最后一行if(row==n){result.add(strContruct(board));return;}//3.单层搜索条件for(int col=0;col<n;col++){if(isValid(board,row,col,n)){board[row][col]='Q';// “每一行只放一个皇后” 的规则。因为函数每次被调用时,只处理 row 这一行。在这一行的 for 循环里,它会尝试在 (row, 0), (row, 1), (row, 2)... 等位置放皇后,但一次只会放一个。放下一个之后,它就立刻递归到 row + 1 行去了,所以,“不同行” 是由这个递归结构保证的。backTracking(result,board,row+1,n);board[row][col]='.';}}}private boolean isValid(char[][]board,int row,int col,int n){//不能同列for(int i=0;i<row;i++){if(board[i][col]=='Q'){return false;}}//不能是对角线 45度for(int i=row-1, j=col-1;i>=0&&j>=0;i--,j--){if(board[i][j]=='Q'){return false;}}for(int i=row-1,j=col+1;i>=0&&j<n;i--,j++){if(board[i][j]=='Q'){return false;}}return true;}private List<String> strContruct(char[][] board){// 将 char[][] 棋盘转换为 List<String> 的格式List<String> res=new ArrayList<>();for(int i=0;i<board.length;i++){String curstr=new String(board[i]);res.add(curstr);}return res;}}
http://www.lryc.cn/news/625227.html

相关文章:

  • Hadoop - 1:Hadoop 技术解析;Hadoop是什么;Hadoop优势;Hadoop组成;HDFS、YARN、MapReduce 三者关系
  • <数据集>遥感飞机识别数据集<目标检测>
  • Ubuntu下无法在huggingface下载指定模型的解决方法
  • FreeRTOS学习笔记(二)
  • MySQL的多版本并发控制(MVCC):
  • Windows系统上使用GIT
  • 基于JS实现的中国象棋AI系统:多模块协同决策与分析
  • 【C语言16天强化训练】从基础入门到进阶:Day 2
  • 计算机大数据毕业设计推荐:基于Hadoop+Spark的食物口味差异分析可视化系统【源码+文档+调试】
  • 数据转换细节揭秘:ETL如何精准映射复杂业务逻辑
  • 深入解析StatefulSet与K8s服务管理
  • 力扣 hot100 Day77
  • LeetCode:无重复字符的最长子串
  • 08.常见文本处理工具
  • vue从入门到精通:轻松搭建第一个vue项目
  • Gemini CLI 系统配置小结
  • SpringBoot3整合OpenAPI3(Swagger3)完整指南
  • EasyExcel篇
  • PDF处理控件Aspose.PDF教程:将 PNG 合并为 PDF
  • 牛客周赛 Round 105(小苯的xor构造/小苯的权值计算/小苯的01矩阵构造/小苯的重排构造/小苯的xor图/小苯的前缀gcd构造)
  • Android RxBinding 使用指南:响应式UI编程利器
  • Linux网络服务(一)——计算机网络参考模型与子网划分
  • 【MyBatis-Plus】一、快速入门
  • 拓扑排序详解:从力扣 207 题看有向图环检测
  • 算法-每日一题(DAY13)两数之和
  • 蓝桥杯算法之搜索章 - 7
  • OVS:除了Geneve和VXLAN,还有哪些虚拟化网络协议?
  • 【DL学习笔记】损失函数各个类别梳理
  • MacOS 安全机制与“文件已损坏”排查完整指南
  • LAMP 架构部署:Linux+Apache+MariaDB+PHP