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

回溯----8.N皇后

题目链接

/**

            将n个棋子放在n*n的棋盘上,不同列,不同行,不同斜线

            大致执行流程:

                    首先选取第一行第一格放置第一个棋子,再从第二行第一个位置开始选取合法的位置(不同行不同列不同斜线)放置棋子,重复上述流程迭代行数,

                    直到放置n个棋子。

                    若放置途中出现无合法位置的情况,回溯将上一行棋子放置在其他合法位置,再重复上述流程继续放置直到n个棋子。

                    成功放置n个棋子后得到第一种情况,开始回溯重复上述流程,直到回溯至第一行的每个格子都尝试过,得到所有结果

            额外方法:

                    boolean isValid 检查欲放置位置的合法性

                    List<String> BoardToList 棋盘格式转换

 */

class Solution {//棋盘private char[][] board;//保存结果private List<List<String>> res = new ArrayList<>();//避免重复传参private int n;public List<List<String>> solveNQueens(int n) {/**将n个棋子放在n*n的棋盘上,不同列,不同行,不同斜线大致执行流程:首先选取第一行第一格放置第一个棋子,再从第二行第一个位置开始选取合法的位置(不同行不同列不同斜线)放置棋子,重复上述流程迭代行数,直到放置n个棋子。若放置途中出现无合法位置的情况,回溯将上一行棋子放置在其他合法位置,再重复上述流程继续放置直到n个棋子。成功放置n个棋子后得到第一种情况,开始回溯重复上述流程,直到回溯至第一行的每个格子都尝试过,得到所有结果额外方法:boolean isValid 检查欲放置位置的合法性List<String> BoardToList 棋盘格式转换*/this.n = n;this.board = new char[n][n];//初始化棋盘for(int i = 0; i < n; i++) {for(int j = 0; j < n; j++) {board[i][j] = '.';}}//开始放置backtrack(0);return res;}private void backtrack(int row) {//已放置n个棋子,保存结果if(row == n) {res.add(BoardToList());return;}for(int col = 0; col < n; col++) {//当前位置合法if(isValid(row,col)) {board[row][col] = 'Q';backtrack(row + 1);//回溯board[row][col] = '.';}}}//判断合法性 判断不同列不同斜线即可,同行已由index控制private boolean isValid(int row, int col) {//检查列冲突 row可体现出已放置棋子数 i < row 避免不必要的检查for(int i = 0; i < row; i++) {if(board[i][col] == 'Q') {return false;}}//左下对角(上方无棋子,无需检查左上)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;}// 将棋盘转换为结果格式(List<String>)private List<String> BoardToList() {List<String> list = new ArrayList<>();for (int i = 0; i < n; i++) {list.add(new String(board[i])); //按行批量转化}return list;}}

http://www.lryc.cn/news/572331.html

相关文章:

  • C++ std::set的用法
  • 根据图片理解maven
  • FocalAD论文阅读
  • SpringBoot 应用开发核心分层架构与实战详解
  • SpringBoot电脑商城项目--修改默认收货地址
  • 计算机网络:(四)物理层的基本概念,数据通信的基础知识,物理层下面的传输媒体
  • Mac电脑-Office 2024 长期支持版(Excel、Word、PPT)
  • 【数据破茧成蝶】企业数据标准:AI时代的智能罗盘与增长基石
  • 探索大语言模型(LLM):Lora vs. QLora:参数高效微调的双生花,你该选谁?
  • 协作式机器人助力提高生产速度和效益
  • Java泛型详解与阿里FastJSON源码中的巧妙运用
  • 生成式 AI 的发展方向,应当是 Chat 还是 Agent?
  • 华为OD机试-MELON的难题-DFS(JAVA 2025A卷)
  • 【QT】TXT电子书语音朗读器开发
  • 《Whisper :说明书 》
  • 智能家居HA篇 二、配置Home Assistant并实现外部访问
  • Kafka存储设计深度剖析:日志、索引与文件管理的底层奥秘
  • 【Dify 案例】【自然语言转SQL案例】【三】【工具】【自然语言转SQL】
  • 14.7 LangChain三阶训练法:揭秘智能阅读系统如何用动态难度调节实现92%题目准确率
  • 使用springboot实现过滤敏感词功能
  • Linux文件I/O系统调用深度解析
  • C++ 面向对象特性详解:继承机制
  • 【AI作画】第2章comfy ui的一般输入节点,文本框的类型和输入形式
  • F接口基础.go
  • P2066 机器分配
  • 八字排盘小游戏微信流量主小程序开源
  • 【嵌入式硬件实例】-555定时器控制舵机/伺服电机
  • 坤驰科技QTS4200战鹰(Battle Eagle)系列实时频谱分析记录回放系统
  • day09——Java基础项目(ATM系统)
  • AI免费工具:promptpilot、今天学点啥、中英文翻译