算法4-----综合训练(3)

一:优美的排列

题目:

有1~n的n个整数,用这些数构造一个数组perm,只要构造的数组满足以下两个条件:

(1)i可以被perm[i]整除

(2)perm[i]可以被i整除

返回其能构造出的优美数组的个数

方法:

1:画出决策树

2:算法原理

类似于全排列的思路,不过不需要path数组,只需要统计优美排列的个数即可

全局变量

int ret;(总共的个数)

bool check[];(当前数字是否已被使用)

dfs函数

dfs(int pos, int n);

class Solution {int ret;//记录总的个数bool check[16];//当前位置的数是否被使用
public:int countArrangement(int n) {dfs(1,n);//后一个为path,记录当前的数return ret;}void dfs(int pos,int n){if(pos==n+1){ret++;return;}for(int i = 1;i<=n;i++){if(check[i]==false&&(pos%i==0||i%pos==0)){check[i] = true;dfs(pos+1,n);check[i] = false;}}}
};

二:N皇后

题目:

按照国际象棋的规则,皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。

n 皇后问题 研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。

给你一个整数 n ,返回所有不同的 n 皇后问题 的解决方案。

每一种解法包含一个不同的 n 皇后问题 的棋子放置方案,该方案中 'Q' 和 '.' 分别代表了皇后和空位

方法:

1:画出决策树

2:算法原理

如何进行剪枝,提高代码效率是重点

基本思路:从每一行开始进行递归,在每一行的时候又从每一列开始进行判断可否加上皇后

剪枝(考虑当前的位置是否可以放上皇后):

(1)无脑循环

(2)类似于哈希表

每一列都只能有一个皇后,可以用一个函数标记当前列的位置是否有皇后;

主对角线上和副对角线上也只能有一个皇后,同样可以利用同一对角线上满足一次线性函数的特性,进行标记和后续判断;

全局变量:

vector<vector<string>> ret;(记录全部有效的排列)

vector<string> path;(记录当前这一条的排列方法)

bool checkCol[];(判断当前列是否可以已有皇后)

bool checkDig1[];(判断主对角线上是否已有皇后)

bool checkDig2[];(判断副对角线是否已有皇后)

int n;(棋牌的规格)

代码一些方法:

先将path全部初始化为‘.’,方便之后直接进行皇后的添加

class Solution {bool checkCol[10];//这一列是否有皇后bool checkDig1[20];bool checkDig2[20];vector<vector<string>> ret;vector<string> path;int n;
public:vector<vector<string>> solveNQueens(int _n) {n = _n;path.resize(n);for(int i = 0;i<n;i++){path[i].append(n,'.');}dfs(0);return ret;}void dfs(int row){if(row==n){ret.push_back(path);return;}for(int col = 0;col<n;col++){if(!checkCol[col]&&!checkDig1[row-col+n]&&!checkDig2[row+col]){path[row][col] = 'Q';checkCol[col] = checkDig1[row-col+n] = checkDig2[row+col] = true;dfs(row+1);path[row][col] = '.';checkCol[col] = checkDig1[row-col+n] = checkDig2[row+col] = false;}}}
};

三:有效的数独(本道题不牵扯回溯,主要利用哈希表的知识)

题目:

判断一个9*9的的数独是否有效,要有效需要满足以下的规则:

(1)数字1~9在每一行只出现一次;

(2)数字1~9在每一列只出现一次;

(3)数字1~9在每一个以粗实线分割的3*3宫内只出现一次

方法:

全局变量:

bool row[][];(标记一行的数,看是否有重复)

bool col[][];(标记一列的数,看是否有重复)

bool grid[][][];(三维数组,解决3*3宫内数不重复的问题)

class Solution {bool row[9][10];bool col[9][10];bool grid[3][3][10];
public:bool isValidSudoku(vector<vector<char>>& board) {for(int i = 0;i<9;i++)for(int j = 0;j<9;j++){if(board[i][j]!='.'){int num = board[i][j] - '0';//是否有效if(row[i][num]||col[j][num]||grid[i/3][j/3][num])return false;row[i][num] = col[j][num] = grid[i/3][j/3][num] = true;}}return true;}};

四:解数独

题目:

编写一个程序,通过填充空格来解决数独问题,需要满足以下规则:

(1)数字1~9在每一行只出现一次;

(2)数字1~9在每一列只出现一次;

(3)数字1~9在每一个以粗实线分割的3*3宫内只出现一次

方法以及思路:

同有效数独这一题全局变量一致,需要三个来标记当前位置的bool数组

需要先将数独遍历一遍,将那三个数组初始化,接着再进行dfs函数的设计

在dfs函数中,需要将数独进行遍历,然后在空的位置,将1~9这几个数字判断一下是否可以填进去,之后因为只存在唯一的一个解法,所有还要对当前位置没有数字可以填进的情况,直接返回false,避免程序出现bug。

dfs函数设计:bool dfs(vector<vector<char>>& board)

class Solution {bool row[9][10],col[9][10],grid[3][3][10];
public:void solveSudoku(vector<vector<char>>& board) {//初始化,将里面原本有的数进行标记for(int i = 0;i<9;i++){for(int j = 0;j<9;j++){if(board[i][j]!='.'){int num = board[i][j] - '0';row[i][num] = col[j][num]  =grid[i/3][j/3][num] = true;}}}dfs(board);}bool dfs(vector<vector<char>>& board){for(int i = 0;i<9;i++){for(int j = 0;j<9;j++){if(board[i][j]=='.'){//填数for(int num = 1;num<=9;num++){if(!row[i][num]&&!col[j][num]&&!grid[i/3][j/3][num]){board[i][j] = '0'+num;row[i][num] = col[j][num] = grid[i/3][j/3][num] = true;if(dfs(board)==true)  return true;//恢复现场board[i][j] = '.';row[i][num] = col[j][num] = grid[i/3][j/3][num] = false;}}return false;}}}return true;}
};

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

影刀RPA应用迁移应用复制完整步骤-本地工具

影刀应用迁移工具本地版 不需要输入影刀的用户名和密码就能实现应用的迁移 依赖本地电脑中登录的账号 使用方法 打开软件需要激活,请联系: 左侧选择一个账号选择需要迁移的应用选择目标账号选择要替换的应用 需要用目标账号创建一个空应用,然后在这一步选择点击替换 Q&A…

3. 轴指令(omron 机器自动化控制器)——>MC_MoveRelative

机器自动化控制器——第三章 轴指令 5 MC_MoveRelative变量▶输入变量▶输出变量▶输入输出变量 功能说明▶指令详情▶时序图▶重启运动指令▶多重启动运动指令▶异常 MC_MoveRelative 指定自指令当前位置起的移动距离&#xff0c;进行定位。 指令名称FB/FUN图形表现ST表现MC…

【环境搭建】MySQL安装部署

Win64安装MySQL Windows的玩法比较少&#xff0c;没有像MAC一样给你提供mysqld-safe等等各种的启动脚本&#xff0c;只有手动启动或者是以服务启动Mysql。 点击下载&#xff1a;MySQL5.5-8.0.7z (密码是11) 1.下载软件 这一步下载好软件就可以了&#xff0c;下载地址&#xff…

海山数据库(He3DB)技术分享:He3DB Virtual File Descriptor实现原理

引言 在 He3DB 这样的数据库系统中&#xff0c;文件操作不仅频繁而且复杂。操作系统提供的文件描述符&#xff08;FD&#xff09;数量是有限的&#xff0c;尤其在高并发和大规模数据库操作中&#xff0c;文件描述符资源可能迅速耗尽。为了应对这一挑战&#xff0c;He3DB 引入了…

《深度学习》CNN 数据增强、保存最优模型 实例详解

目录 一、数据增强 1、什么是数据增强 2、目的 3、常用的数据增强方法 4、数据预处理 用法&#xff1a; 5、使用数据增强增加训练数据 二、保存最优模型 1、什么是保存最优模型 2、定义CNN模型 运行结果&#xff1a; 3、设置训练模式 4、设置测试模式、保存最优模…

指针变量的自增、自减运算

指针变量的自增、自减运算相比较于普通变量的自增、自减运算又什么区别呢&#xff1f; 让我们先来复习一下普通变量的自增、自减运算 int main() {int i; //定义一个整型变量printf("请输入一个数字&#xff1a;\n");scanf("%d&qu…

查座位号小程序

如何通过关键词查询信息&#xff1f; 在这个信息化的时代&#xff0c;查座位号小程序为我们提供了一种方便快捷的方式来查询座位信息。无论是在大型会议还是日常办公中&#xff0c;通过小程序快速查找座位号&#xff0c;可以大大提高工作效率。以下是详细的使用指南&#xff0c…

初始MYSQL数据库(7)—— 视图

找往期文章包括但不限于本期文章中不懂的知识点&#xff1a; 个人主页&#xff1a;我要学编程(ಥ_ಥ)-CSDN博客 所属专栏&#xff1a; MYSQL 引言 前面我们学习MySQL数据库时&#xff0c;创建表之后&#xff0c;会在表中插入数据&#xff0c;在需要的时候&#xff0c;也会进行…

stm32 gpio I/O模式以及iic访问

1&#xff0c;硬件补充连接原理图引脚 #define FLASH_BASE ((uint32_t)0x08000000) /*!< FLASH(up to 1 MB) base address in the alias region */ #define CCMDATARAM_BASE ((uint32_t)0x10000000) /*!< CCM(core coupled mem…

点亮一个LED灯

一、任务分析 一个灯怎么样才会亮&#xff1f; 图中的小灯两端接正负极&#xff0c;小灯就会点亮&#xff0c;但是我们不能主动控制灯的亮灭&#xff0c;于是加入了开关。开关打开断开小灯正极&#xff0c;小灯就会熄灭&#xff0c;反之则点亮。 在板子上的灯是如何连接的&…

【学习笔记】exkmp(Z函数)

本文参考洛谷题解&#xff1a;https://www.luogu.com.cn/article/cq4b4e5f 侵删 前言 exkmp 和 kmp 要求的东西比较类似。 exkmp 可以求出 a i . . . n a_{i...n} ai...n​ 和 b b b 的最长公共前缀。 这玩意也称 z 函数。 算法流程 求解 nxt 数组 定义 n x t i nxt_i …

【大模型对话 的界面搭建-Open WebUI】

Open WebUI 前身就是 Ollama WebUI&#xff0c;为 Ollama 提供一个可视化界面&#xff0c;可以完全离线运行&#xff0c;支持 Ollama 和兼容 OpenAI 的 API。 github网址 https://github.com/open-webui/open-webui安装 第一种 docker安装 如果ollama 安装在同一台服务器上&…

博士德王道4S管理系统存在SQL注入漏洞

漏洞描述 博士王道汽车4S企业管理系统&#xff08;以下简称“王道4S系统”&#xff09;是一套专门为汽车销售和维修服务企业开发的管理软件。该系统是博士德软件公司集10余年汽车行业管理软件研发经验之大成&#xff0c;精心打造的最新一代汽车4S企业管理解决方案。石家庄博士…

三子棋小游戏

使用C语言编写代码&#xff0c;实现一个简单小游戏---三子棋 这里创建1个game.h文件&#xff0c;用来声明函数、宏的文件&#xff0c;一个game.c文件用来实现函数game&#xff08;&#xff09;&#xff0c;一个play.h文件用来作为该游戏的源文件。 具体代码如下&#xff1a; …

文件上传、amrkdown编辑器

一、文件上传 这里我以图片为例&#xff0c;进行上传&#xff0c;上传到阿里云oss&#xff08;对象存在中&#xff09; 首先&#xff0c;我们先梳理一下&#xff0c;图片上传的流程 1、前端选择文件&#xff0c;提交文件 前端提交文件&#xff0c;我们可以使用ElementUI中的…

网络:TCP协议-报头字段

个人主页 &#xff1a; 个人主页 个人专栏 &#xff1a; 《数据结构》 《C语言》《C》《Linux》《网络》 文章目录 前言一、TCP协议格式16位源端口号 和 16位目的端口号4位首部长度16位窗口大小32位序号 和 32位确认序号6种标记位 和 16位紧急指针 总结 前言 本文是我对于TCP协…

大数据新视界 --大数据大厂之大数据存储技术大比拼:选择最适合你的方案

&#x1f496;&#x1f496;&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎你们来到 青云交的博客&#xff01;能与你们在此邂逅&#xff0c;我满心欢喜&#xff0c;深感无比荣幸。在这个瞬息万变的时代&#xff0c;我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…

【hot100-java】【下一个排列】

R8-技巧篇 最近速成java中&#xff0c;算法基础需要兼顾。 class Solution {public void nextPermutation(int[] nums) {int lennums.length;List<Integer>list new ArrayList<>();boolean flagtrue;for (int ilen-1;i>0;i--){list.add(nums[i]);Collections.…

[spring]用MyBatis XML操作数据库 其他查询操作 数据库连接池 mysql企业开发规范

文章目录 一. MyBatis XML配置文件1. 配置链接字符串和MyBatis2. 写持久层代码方法定义Interface方法实现xml测试 3. 增删改查增:删改查 二. 开发规范(mysql)三. 其他查询操作1. 多表查询2. #{} 和 ${}(面试题)使用区别 排序功能like查询 三. 数据库连接池 一. MyBatis XML配置…

矩阵的逆怎么算?逆矩阵公式来了(附逆矩阵计算器)

大家好&#xff0c;这里是效率办公指南&#xff01; &#x1f4da; 在线性代数中&#xff0c;逆矩阵是一个非常重要的概念。一个方阵如果存在逆矩阵&#xff0c;意味着该矩阵是可逆的&#xff0c;或者说是非奇异的。逆矩阵在解决线性方程组、计算矩阵的方根等方面有着广泛的应…