回溯算法part06 算法

回溯算法part06 算法

今日任务:
● 51. N皇后
● 37. 解数独

1.leetcode 51. N皇后

https://leetcode.cn/problems/n-queens/description/

class Solution {//存储结果List<List<String>> result=new ArrayList<>();public List<List<String>> solveNQueens(int n) {//存放一个棋盘,一个棋盘是一个二维数组char[][] chessboard=new char[n][n];//将棋盘填满逗点for(char[] c:chessboard){Arrays.fill(c,'.');}backrtacing(chessboard,n,0);//棋盘,多深,当前行(深度)return result;//n 皇后问题 研究的是如何将 n 个皇后放置在 n×n 的棋盘上,//并且使皇后彼此之间不能相互攻击。//皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子}public void backrtacing(char[][] chessboard,int n,int row){//确定终止条件,如果此时深度已经为n了if(row==n){//将棋盘(二维数组)加进结果(二维集合)中//将棋盘二维数组转成一维集合//调用函数result.add(Array2List(chessboard));return;}//进行判断棋盘二维数组的每一个一维(控制横向)for(int i=0;i<n;i++){//第一行第一个元素表示是c[row][i]//row控制整体深度,第几行//i控制横向,哪一个元素//要放皇后前,先检查这个位置的元素合不合法if(isValid(row,i,n,chessboard)){//合法了我们就放chessboard[row][i]='Q';//接着看接下来一层的一维,因为前一个一维已经处理好放不放n皇后了backrtacing(chessboard,n,row+1);//进行回溯chessboard[row][i]='.';//前面函数调用完已经处理加不加进去了//然后进行下一次}}}//将二维数组转成一维集合public List Array2List(char[][] chessboard){List<String> list=new ArrayList<>();for(char[] c:chessboard){list.add(String.copyValueOf(c));}return list;}//判断是不是有效的棋盘位置public boolean isValid(int row, int col, int n, char[][] chessboard) {// 检查列for (int i=0; i<row; ++i) { // 相当于剪枝if (chessboard[i][col] == 'Q') {return false;}}// 检查45度对角线for (int i=row-1, j=col-1; i>=0 && j>=0; i--, j--) {if (chessboard[i][j] == 'Q') {return false;}}// 检查135度对角线for (int i=row-1, j=col+1; i>=0 && j<=n-1; i--, j++) {if (chessboard[i][j] == 'Q') {return false;}}return true;}
}

2.leetcode 37. 解数独

https://leetcode.cn/problems/sudoku-solver/description/

class Solution {public void solveSudoku(char[][] board) {//没有返回值backtracing(board);}public boolean backtracing(char[][] board){//遍历数独的一维横行(遍历行)for(int i=0;i<board.length;i++){//遍历列for(int j=0;j<board.length;j++){//如果遇到是数字的元素位置就跳过if(board[i][j]!='.'){continue;}//遇到不是数字元素的位置,也就是遇到逗点了,需要填充数字for(char k='1';k<='9';k++){//判断该位置是不是合法的,合法才可以加入数字if(isValidSudoku(i,j,k,board)){board[i][j]=k;//开始递归if(backtracing(board)){//如果有合适的直接返回return true;}//进行回溯board[i][j]='.';}}//9个数字都试完了还不行,直接返回falsereturn false;}}//遍历完没有返回false,说明找到了合适棋盘位置了return true;}//判断棋盘是否合法private boolean isValidSudoku(int row, int col, char val, char[][] board){// 同行是否重复for (int i = 0; i < 9; i++){if (board[row][i] == val){return false;}}// 同列是否重复for (int j = 0; j < 9; j++){if (board[j][col] == val){return false;}}// 9宫格里是否重复int startRow = (row / 3) * 3;int startCol = (col / 3) * 3;for (int i = startRow; i < startRow + 3; i++){for (int j = startCol; j < startCol + 3; j++){if (board[i][j] == val){return false;}}}return true;}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/614823.shtml

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

相关文章

详细分析Java中的@JsonFormat注解和@DateTimeFormat注解

目录 前言1. JsonFormat注解2. DateTimeFormat注解3. Demo3.1 无注解3.2 有注解 4. 拓展 前言 下文中涉及MybatisPlus的逻辑删除的知识&#xff0c;可看我之前这篇文章&#xff1a;详细讲解MybatisPlus实现逻辑删除 对应的Navicat设置数据库最新时间可看我这篇文章&#xff1…

MySQL、Oracle、PostgreSQL 数据库备份用的 Shell 脚本

文章目录 一、概要二、MySQL 数据库备份与还原异地备份脚本2.1 MySQL 数据库异地备份脚本2.2 MySQL 数据库的恢复 三、Oracle 数据库备份与还原脚本3.1 Oracle 数据库异地备份脚本3.2 Oracle 数据库的恢复 四、PostgreSQL 数据库异地备份与还原脚本4.1 PostgreSQL 数据库备份脚…

生活自来水厂污水处理设备需要哪些

生活自来水厂是确保我们日常用水质量安全的重要设施。在自来水的生产过程中&#xff0c;污水处理设备是不可或缺的环节。那么&#xff0c;生活自来水厂的污水处理设备都有哪些呢&#xff1f;本文将为您详细介绍。 首先&#xff0c;生活自来水厂的污水处理设备主要包括预处理设备…

第11章 GUI Page489~494 步骤三十 保存画板文件

为“保存”菜单项 MenuItemFileSave挂接事件响应函数&#xff1a; 实际运行时&#xff0c;现版TrySaveFile()函数有点儿傻&#xff0c;点击保存菜单&#xff0c;还会弹出对话框&#xff0c;问我们“要不要保存” 修改TrySaveFile()函数 函数声明修改为&#xff1a; 函数实现修…

药品不良反应智能监测系统,java药品不良反应(ADR)智能监测系统源码,基于SpringBoot+Vue+MySQL技术开发

java药品不良反应智能监测系统 系统概述&#xff1a; 基于AI技术和深度学习模型&#xff0c;系统构建ADR智能识别模型&#xff0c;实现病程记录分析&#xff0c;提取病程记录实体&#xff0c;并完成语义关系的分类识别。一方面可以根据医务人员设置的监测任务或主题&#xff0c…

Open CV 图像处理基础:(六)在Java中使用 Open CV进行图片翻转和图片旋转

在Java中使用 Open CV进行图片翻转和图片旋转 目录 在Java中使用 Open CV进行图片翻转和图片旋转前言图片翻转函数代码示例其它翻转方向垂直翻转两轴翻转 图片旋转函数代码示例 Open CV 专栏导航 前言 在Java中使用OpenCV进行图片翻转和旋转是一种基本的图像处理技术&#xff0…

管理篇 - 24到28

学习目标&#xff1a; 为了更轻松的工作 学习内容&#xff1a; 新手管理最常犯的错&#xff1a;太把自己当回事儿&#xff01;当管理比自己干活还累&#xff1f;升职加薪后他真香了&#xff01;管理误区&#xff1a;要不要和下属做朋友&#xff1f;很多人都只理解了第一层&…

MySQL面试题 | 02.精选MySQL面试题

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…

vim基本操作命令

一、vi简介 vi是“Visual interface”的简称&#xff0c;它在Linux上的地位就仿佛Edit程序在DOS上一样。它可以执行输出、删除、查找、替换、块操作等众多文本操作&#xff0c;而且用户可以根据自己的需要对其进行定制。Vi不是一个排版程序&#xff0c;它不象Word或WPS那样可以…

商城小程序(8.购物车页面)

目录 一、商品列表区域1、渲染购物车商品列表的标题区域2、渲染商品列表区域的基本结构3、为my-goods组件封装radio勾选状态4、为my-goods组件封装radio-change事件5、修改购物车中商品的选择状态6、为my-goods组件封装NumberBox7、为my-goods封装num-change事件8、修改购物车商…

解决opencv出错:ImportError: numpy.core.multiarray failed to import

利用安装好opencv后&#xff0c;导入cv2的时候报错&#xff0c;如下 from .cv2 import * ImportError: numpy.core.multiarray failed to import这里是numpy库的版本过低或者过高&#xff0c;不合适刚刚装的opencv版本。 尝试升高或降低numpy版本&#xff0c;一般是升级到高版…

11.1、信赖域策略优化算法TRPO强化学习-从理论到实践

基于LunarLander登陆器的TRPO强化学习&#xff08;含PYTHON工程&#xff09; TRPO强化学习算法主要分为3个部分&#xff0c;分别介绍其理论、细节、实现 本文主要介绍TRPO的特点、思路、和优化式子的推导 TRPO系列&#xff08;TRPO是真的复杂&#xff0c;全部理解花费了我半…

【论文笔记】End-to-End Diffusion Latent Optimization Improves Classifier Guidance

Abstract Classifier guidance为图像生成带来了控制&#xff0c;但是需要训练新的噪声感知模型(noise-aware models)来获得准确的梯度&#xff0c;或使用最终生成的一步去噪近似&#xff0c;这会导致梯度错位(misaligned gradients)和次优控制(sub-optimal control)。 梯度错位…

算法训练营Day37

#Java #动态规划 Feeling and experiences&#xff1a; 目标和&#xff1a;力扣题目链接 给你一个非负整数数组 nums 和一个整数 target 。 向数组中的每个整数前添加 或 - &#xff0c;然后串联起所有整数&#xff0c;可以构造一个 表达式 &#xff1a; 例如&#xff0c…

facebook广告素材制作要注意哪些

在制作Facebook广告素材时&#xff0c;需要注意以下几点&#xff1a; 目标受众&#xff1a;了解目标受众的喜好、需求和兴趣&#xff0c;以便制作能够吸引他们的广告素材。广告格式&#xff1a;选择适合广告内容的格式&#xff0c;如图片、视频、幻灯片等。同时&#xff0c;要…

jmeter--1.安装

目录 1. jmeter和jdk下载地址 2. jdk环境变量配置 3. Jmeter的环境变量配置 1. jmeter和jdk下载地址 链接&#xff1a;https://pan.baidu.com/s/1C8ItsR8ZUGJO9uyTJ-9QtQ?pwdx5m5 提取码&#xff1a;x5m5 2. jdk环境变量配置 2.1 我的电脑右键属性-->高级系统设置--&…

20240111在ubuntu20.04.6下解压缩RAR格式的压缩包

20240111在ubuntu20.04.6下解压缩RAR格式的压缩包 2024/1/11 18:25 百度搜搜&#xff1a;ubuntu rar文件怎么解压 rootrootrootroot-X99-Turbo:~/temp$ ll total 2916 drwx------ 3 rootroot rootroot 4096 1月 11 18:28 ./ drwxr-xr-x 25 rootroot rootroot 4096 1月…

详细分析Java中的分布式任务调度框架 XXL-Job

目录 前言1. 基本知识2. Demo3. 实战 前言 可视化任务调度 可视化配置 1. 基本知识 在Java中&#xff0c;分布式任务调度框架 XXL-Job 是一个开源的分布式任务调度平台&#xff0c;用于实现分布式系统中的定时任务调度和分布式任务执行。 下面是关于XXL-Job的一些概念、功…

05- OpenCV:图像操作和图像混合

目录 一、图像操作 1、读写图像 2、读写像素 3、修改像素值 4、Vec3b与Vec3F 5、相关的代码演示 二、图像混合 1、理论-线性混合操作 2、相关API(addWeighted) 3、代码演示&#xff08;完整的例子&#xff09; 一、图像操作 1、读写图像 &#xff08;1&#xff09;…

IDC机房服务器搬迁之运行了几年的服务器没关过机,今天关机下架,再上架突然起不来了,怎么快速处理?

环境 戴尔R420 服务器 1U 2台直连存储 4U CentOS 7 问题描述 IDC机房服务器搬迁之运行了几年的服务器没关过机,今天关机下架,再上架突然起不来了,怎么快速处理? 服务器上电开机就出现进入紧急模式 Welcome to emergency mode! After logging in, type “journalctl …