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

一:单词搜索

题目:

给定一个m*n的二位字符网格和一个字符串单词。如果单词存在于网格中,返回true,不然,返回false。

注意:单词必须按照字母顺序,通过相邻的单元格内的字母构成,同一个单元格内的字母不可以被重复使用。

方法:

1:画出决策树

2:算法原理

dfs函数的设计:

dfs(board,i,j,s,pos)

(board表示题给的网格,i,j表示当前的位置,s表示要查找的单词,pos表示当前查找到的位置)

细节部分:

为了避免查找当同一位置的字母,有两种方法可以解决:

(1)创建一个与网格同等大小的数组,标记每个位置是否已被使用

bool check[][];

(2)将已经用过的位置里的字母进行篡改(该种方法只适用于原数组可以被修改的情况)

特殊方法:

利用向量的方式,定义上下左右四个位置

首先,设立两个数组:int dx[4] = {0,0,1,-1};int dy[4] = {-1,1,0,0}

将这当前位置的坐标分别加上这两个数组进行的遍历,就可以轻松得到当前位置上下左右四个位置的坐标

class Solution {bool check[7][7];//判断是否已被使用int m,n;public:bool exist(vector<vector<char>>& board, string word) {m = board.size(),n = board[0].size();for(int i = 0;i<m;i++){for(int j = 0;j<n;j++){if(board[i][j] == word[0]){check[i][j] = true;if(dfs(board,i,j,word,1))  return true;check[i][j] = false;}}}return false;}int dx[4] = {0,0,-1,1};int dy[4] = {1,-1,0,0};bool dfs(vector<vector<char>>& board,int i,int j,string& word,int pos){if(pos == word.size())return true;//1//向量的方式,定义上下左右四个位置for(int k = 0;k<4;k++){int x = i+dx[k],y = j+dy[k];//是否越界并且未被使用if(x>=0&&x<m&&y>=0&&y<n&&!check[x][y]&&board[x][y]==word[pos]){check[x][y] = true;if(dfs(board,x,y,word,pos+1))  return true;check[x][y] = false;}}return false;}
};

二:黄金矿工(与单词搜索思路基本一致)

题目:

你要开发一座金矿,地质勘测学家已经探明了这座金矿中的资源分布,并用大小为 m * n 的网格 grid 进行了标注。每个单元格中的整数就表示这一单元格中的黄金数量;如果该单元格是空的,那么就是 0

为了使收益最大化,矿工需要按以下规则来开采黄金:

(1)每当矿工进入一个单元,就会收集该单元格中的所有黄金。

(2)矿工每次可以从当前位置向上下左右四个方向走。

(3)每个单元格只能被开采(进入)一次。

(4)不得开采(进入)黄金数目为 0 的单元格。

(5)矿工可以从网格中 任意一个 有黄金的单元格出发或者是停止。

方法:

1:画出决策树(与上一题基本一致,为避免重复,在此省略)

2:算法原理

与上一题的单词搜索思路基本一致,防止重复的方法变为了要将原先的单元格进行改变

dfs函数的设计:

void dfs(grid,i,j,path)((i,j)为当时位置的坐标,path记录每一步走到的值并把它加起来)

PS:不需要递归出口,用一个函数将ret与path进行比较得到最大的那个即可

class Solution {bool vis[16][16];int ret;//记录最后采集到的矿石int dx[4] = {0,0,1,-1};int dy[4] = {1,-1,0,0};int m,n;
public:int getMaximumGold(vector<vector<int>>& grid) {m = grid.size(),n = grid[0].size();for(int i = 0;i<m;i++){for(int j = 0;j<n;j++){if(grid[i][j]!=0){vis[i][j] = true;dfs(grid,i,j,grid[i][j]);vis[i][j] = false;}}}return ret;}void dfs(vector<vector<int>>& grid,int i,int j,int path){//不需要递归出口ret = max(ret,path);for(int k = 0;k<4;k++){int x = i+dx[k],y = j+dy[k];if(x>=0&&x<m&&y>=0&&y<n&&!vis[x][y]&&grid[x][y]){vis[x][y] = true;dfs(grid,x,y,path+grid[x][y]);vis[x][y] = false;}}}
};

三:不同路径3

题目:

在二维网格 grid 上,有 4 种类型的方格:

(1)1 表示起始方格。且只有一个起始方格。

(2)2 表示结束方格,且只有一个结束方格。

(3)0 表示我们可以走过的空方格。

(4)-1 表示我们无法跨越的障碍。

返回在四个方向(上、下、左、右)上行走时,从起始方格到结束方格的不同路径的数目。

每一个无障碍方格都要通过一次,但是一条路径中不能重复通过同一个方格。

方法:

1:画出决策树(与前面的思路基本一致)

2:算法原理

直接进行暴力搜索,计数到2的步数,与原本网格中0的个数进行比较,合法就直接算作一条有效路径,不合法直接返回即可

class Solution {bool vis[21][21];int dx[4] = {1,-1,0,0};int dy[4] = {0,0,1,-1};int ret;int m,n,step;
public:int uniquePathsIII(vector<vector<int>>& grid) {m = grid.size(),n = grid[0].size();int bx = 0,by = 0;for(int i = 0;i<m;i++){for(int j = 0;j<n;j++){if(grid[i][j]==0)  step++;else if(grid[i][j]==1){bx = i;by = j;}}}step+=2;vis[bx][by] = true;dfs(grid,bx,by,1);return ret;}void dfs(vector<vector<int>>& grid,int i,int j,int count){if(grid[i][j]==2){if(count==step)ret++;return;}for(int k = 0;k<4;k++){int x = i+dx[k],y = j+dy[k];if(x>=0&&x<m&&y>=0&&y<n&&!vis[x][y]&&grid[x][y]!=-1){vis[x][y] = true;dfs(grid,x,y,count+1);vis[x][y] = false;}}}
};

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

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

相关文章

停车场管理系统的设计与实现

摘 要 如今社会上各行各业&#xff0c;都喜欢用自己行业的专属软件工作&#xff0c;互联网发展到这个时候&#xff0c;人们已经发现离不开了互联网。新技术的产生&#xff0c;往往能解决一些老技术的弊端问题。因为传统停车场管理系统信息管理难度大&#xff0c;容错率低&…

使用豆包Marscode 创建了一个”天气预报“小应用

以下是「豆包MarsCode 体验官」优秀文章&#xff0c;作者一拳干爆显示器。 前言 本文介绍了我第一次使用我在MarsCode IDE制作了一款天气预报的应用 其中在正文的头部以及结语部分发表了我在MarsCode编程中的体验情况&#xff0c;而正文的中间主要是我项目制作的细节步骤 豆…

SPWM正弦波控制

目录 前言一、PWM简介二、SPWM基本原理2.1 SPWM简介2.2 SPWM控制方法2.2.1 直接计算法2.2.2 自然采样法2.2.3 谐波法 2.3 SPWM的注意点2.3.1 死区效应2.3.2 过调制2.3.3 转矩与转速控制 三、SPWM实现四、补充 前言 本文主要介绍SPWM原理及C语言单片机的实现 一、PWM简介 PWM是P…

Vue 响应式监听 Watch 最佳实践

一. 前言 上一篇文章我们学习了 watch 的基础知识&#xff0c;了解了它的基本使用方法及注意事项&#xff0c;本篇文章我们继续了解在Vue 中 响应式监听 watch 的妙用。了解 watch 的基础使用请参考上一篇文章&#xff1a; 详解 Vue 中 Watch 的使用方法及注意事项https://bl…

ARM单片机的中断详细过程(重要)

ARM单片机的中断详细过程&#xff08;重要&#xff09; 一、ARM异常中断 ARM的异常&#xff08;中断源&#xff09;总共分为三类&#xff08;八种&#xff09;&#xff1a; 三类&#xff1a; &#xff08;1&#xff09;执行指令引起的直接异常&#xff1a;软件中断&#xff…

0920作业+思维导图

一、 写一个shell脚本&#xff0c;将以下内容放到脚本中&#xff1a; 在家目录下创建目录文件&#xff0c;dirdir下创建dir1和dir2把当前目录下的所有文件拷贝到dir1中&#xff0c;把当前目录下的所有脚本文件拷贝到dir2中把dir2打包并压缩为dir2.tar.xz再把dir2.tar.xz移动到…

13.第二阶段x86游戏实战2-动态模块地址

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 本次游戏没法给 内容参考于&#xff1a;微尘网络安全 本人写的内容纯属胡编乱造&#xff0c;全都是合成造假&#xff0c;仅仅只是为了娱乐&#xff0c;请不要…

LabVIEW项目编码器选择

在LabVIEW项目中&#xff0c;选择增量式&#xff08;Incremental Encoder&#xff09;和绝对式&#xff08;Absolute Encoder&#xff09;编码器取决于项目的具体需求。增量式编码器和绝对式编码器在工作原理、应用场景、精度和成本等方面存在显著差异。以下从多方面详细阐述两…

MySql数据库---单表查询,高级查询,外键约束,多表关系,建表原则

思维导图 模糊查询 select * from 表名 where 列名 like 匹配符; 符号: _ 表示一个任意字符 符号: % 表示0或者多个任意字符 # &#xff08;1&#xff09;查询商品名称含有"香"字的所有商品信息&#xff1b; select * from product where pname like %香%; # &#x…

【车联网安全】车端知识调研

一、CAN总线&#xff1a; 1、定义&#xff1a; CAN 总线相当于汽车的神经网络&#xff0c;连接车内各控制系统,其通信采用广播机制&#xff0c;各连接部件均可收发控制消息&#xff0c;通信效率高&#xff0c;可确保通信实时性。当前市场上的汽车至少拥有一个CAN网络&#xff0…

Thinkphp(TP)

1.远程命令执行 /index.php?sindex/think\app/invokefunction&functioncall_user_func_array&vars[0]system&vars[1][]whoami 2.远程代码执行 /index.php?sindex/think\app/invokefunction&functioncall_user_func_array&vars[0]phpinfo&vars[1][]…

多模态文档编辑器flowmix/docx,9月更新复盘!

嗨, 大家好, 我是徐小夕. 之前一直在社区分享零代码&低代码的技术实践&#xff0c;也陆陆续续设计并开发了多款可视化搭建产品&#xff0c;比如&#xff1a; H5-Dooring&#xff08;页面可视化搭建平台&#xff09;V6.Dooring&#xff08;可视化大屏搭建平台&#xff09;橙…

js发送邮件至指定邮箱功能实现方式和技巧?

js发送邮件至指定邮箱的教程&#xff1f;怎么使用Node.js发信&#xff1f; 无论是用户反馈、订单确认还是密码重置&#xff0c;js发送邮件至指定邮箱的需求无处不在。AokSend将深入探讨js发送邮件至指定邮箱的实现方式和技巧&#xff0c;帮助开发者更好地理解和应用这一功能。…

html TAB、table生成

1. 代码 <!DOCTYPE html> <head> <meta charset"UTF-8"> <title>Dynamic Tabs with Table Data</title> <style> /* 简单的样式 */ .tab-content { display: none; border: 10px solid #ccc; padding: 30px; mar…

道路车辆功能安全 ISO 26262标准(3)—概念阶段

写在前面 本系列文章主要讲解道路车辆功能安全ISO26262标准的相关知识&#xff0c;希望能帮助更多的同学认识和了解功能安全标准。 若有相关问题&#xff0c;欢迎评论沟通&#xff0c;共同进步。(*^▽^*) 1. 道路车辆功能安全ISO 26262标准 3. ISO 26262-3 概念阶段 我们来…

浙江欧瑞雅装饰材料有限公司:全屋定制,为爱家增添无限温馨!

浙江欧瑞雅装饰材料有限公司&#xff1a;全屋定制&#xff0c;为爱家增添无限温馨&#xff01;在追求生活品质与个性化的今天&#xff0c;家已不仅仅是一个居住的空间&#xff0c;更是情感的寄托和个性的展现。浙江欧瑞雅装饰材料有限公司&#xff0c;以其专业的全屋定制服务&a…

论文阅读 - SWATTING Spambots: Real-time Detection of Malicious Bots on X

https://web.archive.org/web/20240523035749id_/https://dl.acm.org/doi/pdf/10.1145/3589335.3651564 目录 ABSTRACT INTRODUCTION METHODOLOGY 3 RESULTS ABSTRACT 在 X&#xff08;前身为 Twitter&#xff09;等社交网络平台上&#xff0c;垃圾邮件机器人的活动日益…

html中为div添加展开与收起功能(div折叠)

1、添加样式 <style type"text/css">.mask {position: absolute;bottom: -5px;color: #4b83f0;font-weight: 700;font-size: 14px;text-align: center;height: 80px;left: 0;right: 0;background-image: -webkit-gradient(linear, left top, left bottom, from…

机械零件检测系统源码分享

机械零件检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer Vis…

零基础入门AI大模型应用开发——第三天:使用python实现问答机器人

一、简介 问答机器人是一种能够理解用户提问并提供相关答案的程序。它可以用于各种场景&#xff0c;如客户支持、在线教育、信息检索等。用户通过自然语言输入问题&#xff0c;机器人则通过分析问题并检索相关信息来提供回答。 使用什么技术实现的&#xff1f; 自然语言处理&…