递归算法学习——黄金矿工,不同路径III
目录
编辑
一,黄金矿工
1.题意
2.题目分析
3.题目接口
4.解题思路及代码
二,不同路径III
1.题意
2.解释
3.题目接口
4.解题思路及代码
一,黄金矿工
1.题意
你要开发一座金矿,地质勘测学家已经探明了这座金矿中的资源分布,并用大小为
m * n的网格grid进行了标注。每个单元格中的整数就表示这一单元格中的黄金数量;如果该单元格是空的,那么就是0。为了使收益最大化,矿工需要按以下规则来开采黄金:
- 每当矿工进入一个单元,就会收集该单元格中的所有黄金。
- 矿工每次可以从当前位置向上下左右四个方向走。
- 每个单元格只能被开采(进入)一次。
- 不得开采(进入)黄金数目为
0的单元格。- 矿工可以从网格中 任意一个 有黄金的单元格出发或者是停止。
2.题目分析
这道题要我们做的便是找到一条路径,在这条路径上我们能够收集到的黄金的数量是最多的。在这道题里面还有一个前提便是当遇到数字为0的空格时便不能走这一条路径了。
3.题目接口
class Solution {
public:int getMaximumGold(vector<vector<int>>& grid) {}
};
4.解题思路及代码
先来写个代码:
1.第一种写法
class Solution { public:int m,n;int path;//表示每一条路径上的黄金数量int sum;//记录最大和int dx[4] = {0,0,1,-1},dy[4] = {1,-1,0,0};//坐标法表示坐标的上下左右移动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)//当找到不是0的位置时便可以从这个位置开始递归找结果{path = grid[i][j];int remark = grid[i][j];grid[i][j]=0;//该位置被寻找了以后便要将该位置置为0dfs(grid,i,j);grid[i][j] = remark;path-=remark;}}}return sum;}void dfs(vector<vector<int>>&grid,int i,int j){sum = max(sum,path);//找到sum与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&&grid[x][y]!=0){path+=grid[x][y];int temp = grid[x][y];grid[x][y] = 0;dfs(grid,x,y);path-=temp;grid[x][y] = temp;}}} };其实这道题的解法和我们之前写的矩阵深搜问题的解题代码是差不多的。小小的不同点便是要比较较大值来对sum进行更新。为了避免麻烦我们便用max在每一次进入递归时就比较一下对sum更新一下,以此来确保sum是最大值。
2.第二种写法
在上面的写法中我们使用的是全局变量path和修改原来的矩阵的方式来标记查找过的位置,在这里我们写一种不同的解法:
class Solution { public:int m,n;int sum;bool used[15][15];//用相同大小的used数组来标记使用过的位置。int dx[4] = {0,0,1,-1},dy[4] = {1,-1,0,0};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){used[i][j] = true;dfs(grid,i,j,grid[i][j]);used[i][j] = false;}}}return sum;}void dfs(vector<vector<int>>&grid,int i,int j,int path){sum = max(sum,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&&grid[x][y]!=0&&!used[x][y]){used[x][y] = true;dfs(grid,x,y,path+grid[x][y]);used[x][y] = false;}}} };
二,不同路径III
1.题意
在二维网格
grid上,有 4 种类型的方格:
1表示起始方格。且只有一个起始方格。2表示结束方格,且只有一个结束方格。0表示我们可以走过的空方格。-1表示我们无法跨越的障碍。返回在四个方向(上、下、左、右)上行走时,从起始方格到结束方格的不同路径的数目。
每一个无障碍方格都要通过一次,但是一条路径中不能重复通过同一个方格。
2.解释
这道题要我们做的便是在将数值为0的空格遍历完了以后到达数值为2的空格的路径有几条。还是深度优先搜索的问题。在这道题里数值为-1的格子是一个障碍物,不能去遍历。并且,每个空格只能遍历一次。
3.题目接口
class Solution {
public:int uniquePathsIII(vector<vector<int>>& grid) {}
};
4.解题思路及代码
先写代码:
class Solution { public:int count ;//记录路径的个数int step;//记录要走的步数int num ;//记录当前走了多少步int m,n;bool used[20][20];int dx[4] = {0,0,1,-1},dy[4] = {1,-1,0,0};int uniquePathsIII(vector<vector<int>>& grid) {m = grid.size();n = grid[0].size();int beginx,beginy;for(int i = 0;i<m;i++){for(int j = 0;j<n;j++){if(grid[i][j]==0){step++;//找到0的个数}if(grid[i][j] == 1)//记录入口的下标{beginx = i;beginy = j;}}}step+=1;//算上2这一步used[beginx][beginy] = true;dfs(grid,beginx,beginy);return count;}void dfs(vector<vector<int>>&grid,int i,int j){if(num == step){if(grid[i][j] == 2){count++;}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&&grid[x][y]!=-1&&!used[x][y]){num++;used[x][y] = true;dfs(grid,x,y);num--;used[x][y] = false;}}} };样子还是和之前的题目的的解题代码相像但是在这里就要一个主动的递归出口了,也就是当所有的0都被遍历完了以后到了2这一步就得到了一个结果了。
相关文章:
递归算法学习——黄金矿工,不同路径III
目录 编辑 一,黄金矿工 1.题意 2.题目分析 3.题目接口 4.解题思路及代码 二,不同路径III 1.题意 2.解释 3.题目接口 4.解题思路及代码 一,黄金矿工 1.题意 你要开发一座金矿,地质勘测学家已经探明了这座金矿中的资源…...
pg 创建分区表 --chatGpt
问:postgreSql 创建表 addresses(id,mkey,pri,addr),其中 id自增且id值会超过上百亿,mkey长度为8且唯一的字符串,pri长度64的字符串,addr长度64的字符串,用散列分区的方式创建 gpt: 你可以使用 PostgreSQL 来创建一个包含散列分…...
长城网络靶场,第一题笔记
黑客使用了哪款扫描工具对论坛进行了扫描?(小写简称) 第一关,第三小题的答案是awvs 思路是先统计查询 然后过滤ip检查流量 过滤语句:tcp and ip.addr ip 114.240179.133没有 第二个101.36.79.67 之后找到了一个…...
el-form表单中不同数据类型对应的时间格式化和校验规则
1. 在表单中, 当选择不同的数据类型时, 需要在下面选择时间时和数据类型对应上, 通过监听数据类型的变化, 给时间做格式化, 2. 但是当不按顺序选择数据类型后, 再选时间可能会报错, 所以需要在dom更新后, 再清空表单. 3. 校验规则, 结束时间需要大于开始时间, 但是不能选当前的…...
Python代码雨
系列文章 序号文章目录直达链接1浪漫520表白代码https://want595.blog.csdn.net/article/details/1306668812满屏表白代码https://want595.blog.csdn.net/article/details/1297945183跳动的爱心https://want595.blog.csdn.net/article/details/1295031234漂浮爱心https://want…...
java.util.Optional
原文链接 文章目录 1、Optional作用2、常用API构造相关get / orElse / orElseGet / orElseThrowisPresent / ifPresentfiltermap / flatMap 3、源码翻译 1、Optional作用 类位于:java.util.Optional臭名昭著的空指针异常是导致Java应用程序失败的最常见原因&#…...
微服务--Seata(分布式事务)
TCC模式在代码中实现:侵入性强,并且的自己实现事务控制逻辑 Try,Confirm() cancel() 第三方开源框架:BeyeTCC\TCC-transaction\Himly 异步实现:MQ可靠消息最终一致性 GlobalTransacational---AT模式...
发光太阳聚光器的蒙特卡洛光线追踪研究(Matlab代码实现)
💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...
(涨知识)-圣诞灯串类产品出口都需要做哪些认证?
1. 首先我们讲讲欧盟, 欧盟一向都是合规要求特别多的一个国家,所以向欧盟出口灯串等电子产品,一定要长个心眼。废话不多说,进入正题吧! ①欧盟产品安全:欧代CE(电磁指令EMC低压指令LVD)DOC 产品安全必备三件…...
ROS地图/像素坐标描点调试【Python源码实现】
文章目录 ROS python 地图描点调试工具1. Rviz描点1.1 需求描述1.2 visualization Marker1.3 工程实践 2. 静态地图图片描点2.1 需求描述2.2 工程实践 ROS python 地图描点调试工具 1. Rviz描点 1.1 需求描述 在ROS开发中,有时会加载图片文件转为地图载入move_ba…...
2023年7月京东笔记本电脑行业品牌销售排行榜(京东数据平台)
随着智能手机、平板电脑等移动互联设备的普及,人们对于个人电脑的依赖减轻,加之电脑的更换率较低,因此当前PC端消费市场整体出现疲态,笔记本电脑的出货量不断下降,今年7月份也同样呈现这一趋势。 根据鲸参谋电商数据分…...
用户忠诚度:小程序积分商城的用户保持方法
随着移动互联网的蓬勃发展,小程序积分商城已经成为了许多企业私域营销的热门选择。这个商城不仅可以吸引用户参与,还可以提高用户的忠诚度,进一步加深用户与品牌的互动关系。然而,要实现用户的忠诚度,需要一系列的策略…...
[前端] 使用lerna version更新版本号
lerna version 是一个用于管理 monorepo(多包存储库)的工具,它可以帮助您在多个相关包之间协调版本号的更新和发布。以下是使用 lerna version 更新版本号的一般步骤: 安装 Lerna: 首先,您需要在您的项目中…...
winform嵌入浏览器 webView2
1、项目引用nuget 2、winform窗体中初始化 var webView new WebView2();webView.Source new Uri(url);webView.Dock DockStyle.Fill;//接收js调用c#函数的消息webView.WebMessageReceived CoreWebView2_WebMessageReceivedAsync; this.panel1.Controls.Add(…...
stm32---用外部中断实现红外接收器
一、红外遥控的原理 红外遥控是一种无线、非接触控制技术,具有抗干扰能力强,信息传 输可靠,功耗低,成本低,易实现等显著优点,被诸多电子设备特别是 家用电器广泛采用,并越来越多的应用到计算机系…...
Filter过滤器及HttpServletRequest和HttpServletResponse
拦截器(Interceptor)和过滤器(Filter)的执行顺序 tomcat->Filter->Interceptor->Controller 过滤器(Filter)概述? Filter过滤器是JavaWeb的三大组件之一,三大组件分别为&…...
02-打包代码与依赖
打包代码与依赖说明 在开发中,我们写的应用程序通常需要依赖第三方的库(即程序中引入了既不在 org.apache.spark包,也不再语言运行时的库的依赖),我们就需要确保所有的依赖在Spark应用运行时都能被找到 对于Python而…...
Kotlin(五) 循环语句
目录 For循环 关键字 until step downTo Java中主要有两种循环语句:while循环和for循环。而Kotlin也提供了while循环和for循环,其中while循环不管是在语法还是使用技巧上都和Java中的while循环没有任何区别,因此我们就直接跳过不进行讲解…...
数字孪生产品:数字化时代的变革引擎
数字孪生技术,作为一项前沿的科技创新,正在不断改变我们的世界。它为各行各业的发展提供了无限的可能性,成为了当今数字化时代的一大亮点。数字孪生产品,作为数字孪生技术的具体应用,将在未来发挥越来越重要的作用。 数…...
对接西部数据Western Digital EDI 系统
近期我们为国内某知名电子产品企业提供EDI解决方案,采用知行之桥 EDI 系统作为核心组件,成功与西部数据Western Digital(简称西数)建立EDI连接,实现数据安全且自动化传输。 EDI实施需求 EDI连接 传输协议:A…...
Helm-Git插件:无缝集成Git与Helm,实现Kubernetes Chart的GitOps部署
1. 项目概述:Helm与Git的桥梁 如果你和我一样,长期在Kubernetes生态里打转,那你对Helm一定不陌生。作为Kubernetes的包管理器,它用Chart这个概念,把复杂的应用部署打包得井井有条。但不知道你有没有遇到过这样的场景&…...
改进极限学习机的电池健康状态估计(WOA-ELM)附Matlab代码
✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、程序设计科研仿真。 🍎完整代码获取 定制创新 论文复现点击:Matlab科研工作室 👇 关注我领取海量matlab电子书和数学建模资料 &…...
K210实战:三种高效部署kmodel模型至TF卡的进阶方案
1. K210模型部署的痛点与进阶方案概览 第一次用K210做图像识别项目时,最让我头疼的就是模型部署问题。每次修改模型都要反复插拔TF卡,调试过程像在玩打地鼠游戏。后来才发现,基础的拷贝粘贴只是入门操作,真正高效的部署方式能节省…...
别再只认识空气开关了!从家用配电箱到工厂配电柜,一文搞懂断路器的选型与接线(附实物图)
从家庭配电到工业电力:断路器的实战选型与安全接线指南 推开配电箱的门板,那些排列整齐的断路器不仅仅是电路的通断开关,更是守护用电安全的第一道防线。无论是家庭装修中的线路规划,还是工厂车间的电力分配,选择合适的…...
SingleFile CLI架构解析:高性能网页批量保存解决方案与实战指南
SingleFile CLI架构解析:高性能网页批量保存解决方案与实战指南 【免费下载链接】SingleFile Web Extension for saving a faithful copy of a complete web page in a single HTML file 项目地址: https://gitcode.com/gh_mirrors/si/SingleFile SingleFile…...
T2080工控主板开发实战:从核心特性到系统部署全解析
1. 项目概述:从一块“硬核”主板说起 最近在整理手头的嵌入式项目资料,翻出了一块来自东大金智科技的T2080工控主板。这块板子在我经手过的众多嵌入式平台里,算是相当有“分量”的一位——不是指物理重量,而是其内在的“硬核”实力…...
3个核心优势:Open-Meteo如何用开源技术重构天气API的经济学模型
3个核心优势:Open-Meteo如何用开源技术重构天气API的经济学模型 【免费下载链接】open-meteo Free Weather Forecast API for non-commercial use 项目地址: https://gitcode.com/GitHub_Trending/op/open-meteo 在传统天气数据服务领域,开发者往…...
2026届学术党必备的五大降AI率工具解析与推荐
Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 每位学者以及学生,在学术研究的这条道路之上,都必然要跨越论文写作这…...
基于LLM与向量数据库的家庭智能体助手:架构、部署与场景实践
1. 项目概述:一个面向家庭的智能体助手最近在GitHub上看到一个挺有意思的项目,叫“Home-agent-assistant”。光看名字,你可能会觉得这又是一个智能家居控制中心,或者一个简单的语音助手。但当我深入去研究它的代码和设计理念后&am…...
如何永久保存微信聊天记录:WeChatMsg终极解决方案指南
如何永久保存微信聊天记录:WeChatMsg终极解决方案指南 【免费下载链接】WeChatMsg 提取微信聊天记录,将其导出成HTML、Word、CSV文档永久保存,对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub_Trending/we/WeCha…...
