深度遍历-牛牛的果实迷宫

目录

一、问题描述

二、解题思路

1.返回格式

2.使用深度遍历

3.注意上下左右的实现方式

三、代码实现

四、刷题链接


一、问题描述

二、解题思路

1.返回格式

这个题目的问题返回格式是Point(x,y);x代表最短路径距离,y表示最短路径数量

如果没有从S->E的通路则返回new Point(-1,-1)

2.使用深度遍历

这里巧妙地将遍历过后的位置元素设为'T',避免重复访问产生回路,等dfs完成后将该位置元素还原为'.',方便上层递归调用尝试其他的方案。

3.注意上下左右的实现方式

    int[] dx={0,0,-1,1};//上下左右int[] dy={1,-1,0,0};

这里x指的列,y指的行,所以dx指的上下左右对应列变化,dy指的上下左右对应行的变化

三、代码实现

import java.util.*;/** public class Point {*   int x;*   int y;*   public Point(int x, int y) {*     this.x = x;*     this.y = y;*   }* }*/public class Solution {int minLen=Integer.MAX_VALUE;//记录最短路径距离int pathNum=0;//记录最短路径数量int[] dx={0,0,-1,1};//上下左右int[] dy={1,-1,0,0};int rowLen=0,colLen=0;/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可** * @param forest char字符型二维数组 * @return Point类*/public Point findPath (char[][] forest) {rowLen=forest.length;colLen=forest[0].length;//定位牛牛起始位置for(int i=0;i<rowLen;i++){for(int j=0;j<colLen;j++){if(forest[i][j]=='S'){dfs(forest,i,j,0);break;}}}if(pathNum==0){return new Point(-1,-1);}else{return new Point(minLen,pathNum);}}public void dfs(char[][] forest,int y,int x,int steps){if(forest[y][x]=='E'){if(steps==minLen){pathNum++;}else if(steps>minLen){//此时pathNum不变}else{minLen=steps;pathNum=1;}return;}else{//巧用'T'来避免深度递归遍历中后退情况forest[y][x]='T';for(int idx=0;idx<dx.length;idx++){int nowx=x+dx[idx];//列int nowy=y+dy[idx];//行if(nowx<colLen&&nowx>=0&&nowy<rowLen&&nowy>=0){if(forest[nowy][nowx]!='T'){dfs(forest,nowy,nowx,steps+1);}}}//在递归完成后将此处设置为'.',复原为可访问状态,方便尝试其他方案forest[y][x]='.';}}
}

说明:这个测试用例的预期输出是错误的,应该是(6,3)

四、刷题链接

牛牛的果实迷宫_牛客题霸_牛客网

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

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

相关文章

Linux中的库

什么是库&#xff1f; 库是一组预先编译好的方法/函数的集合&#xff0c;其他程序想要使用源文件中的函数时&#xff0c;只需在编译可执行程序时&#xff0c;链接上该源文件生成的库文件即可。 库分为两类&#xff1a;静态库和动态库 在Linux系统中&#xff0c;以.a为后缀的…

Animate软件基础:删除图层或文件夹

Animate软件中&#xff0c;图层或者图层文件夹同样可以进行删除操作&#xff0c;不过需要注意的是&#xff0c;删除图层或者删除文件夹&#xff0c;都会将其中所有的内容删除。 要选择图层或文件夹&#xff0c;可以单击时间轴中该图层或文件夹的名称&#xff0c;或者单击图层中…

2-自动驾驶关键技术框架

框架 来自《自动驾驶汽车决策与控制》这本书 三大技术 车载平台的关键技术&#xff1a; 环境感知技术&#xff1a;这是自动驾驶车辆能够“看”和“感知”周围世界的技术。它包括使用摄像头、雷达、激光雷达&#xff08;Lidar&#xff09;和超声波传感器来检测和识别道路、障…

ZYNQ MPSOC烧写问题记录

1、如果带有ARM代码&#xff0c;则ZYNQ MPSOC烧写的烧写是通过ViTIS进行的&#xff0c;通过JTAG模式进行烧写&#xff0c;如下图的PS_MODEx配置成0000&#xff0c;这个只与硬件相关&#xff0c;硬件拉高拉低。 2、如果不带ARM代码&#xff0c;则烧写过程与前版本一致。

新手做ASO优化必须要了解的8大指标

在进行 ASO 优化时&#xff0c;以下这些指标通常应优先考虑&#xff1a; 1. 关键词排名 - 这是衡量 ASO 效果的关键指标之一。了解您的应用在特定关键词搜索结果中的位置&#xff0c;有助于评估优化策略的有效性。 2. APP下载量 - 直接反映了应用的受欢迎程度和ASO工作对吸…

ONLYOFFICE8.1版本桌面编辑器——功能测评

一、编辑DOCX 相信大家都有写word文档的经历&#xff0c;不知道大家是不是跟我一样&#xff0c;感觉做一个word不难&#xff0c;但想做好一个word却很麻烦&#xff0c;功能太多&#xff0c;看的人眼花缭乱&#xff0c;有时候一个功能要找很久&#xff0c;甚至有的功能用一辈子都…

[数据库]事务的隔离级别存储引擎

事务的隔离级别 存储引擎 举例 myisam 进行回滚操作后可以发现有一个警告没有行受到影响 memory 比如用于qq的在线离线状态

选专业,适合理科女生的大学专业有哪些?

对于理科女生来说&#xff0c;选择大学专业时&#xff0c;既要考虑自己的兴趣和优势&#xff0c;也要考虑未来的就业前景和发展趋势。以下是一些适合理科女生的大学专业推荐。 一、专业选择要综合考虑 有的人的爱好只是一时兴起&#xff0c;有的人只是愿意为了兴趣爱好&#x…

vscode 使用正则将/deep/ 替换成 :deep()

在VSCODE编辑器的SEARCH中按上图书写即可&#xff0c;正则表达式如下&#xff1a;(\/deep\/)(.*?)(?\{) 替换操作如下&#xff1a;:deep($2) 如果有用,号隔开的用&#xff1a;(\/deep\/)(.*?)(?,)替换操作如下&#xff1a;:deep($2) 即可实现快速替换所有/deep/写法; 同理…

【C语言】--操作符详解

&#x1f32d;个人主页: 起名字真南 &#x1f37f;个人专栏:【数据结构初阶】 【C语言】 目录 1 算术操作符1.1 和 -1.2 *1.3 /1.4 % 2 赋值操作符 &#xff1a;2.1 复合赋值符 3 单目操作符3.1 和- - 4 强制类型转换5 printf 和 scanf5.1 printf5.1.1 基本用法5.1.2 占位符5.…

【教学类65-05】20240627秘密花园涂色书(中四班练习)

背景需求: 打印以下几款秘密花园样式&#xff08;每款10份&#xff09;给中四班孩子玩一下&#xff0c;看看效果 【教学类65-01】20240622秘密花园涂色书01&#xff08;通义万相&#xff09;&#xff08;A4横版2张&#xff0c;一大3小 38张纸76份&#xff09;-CSDN博客文章浏览…

后端加前端Echarts画图示例全流程(折线图,饼图,柱状图)

本文将带领读者通过一个完整的Echarts画图示例项目&#xff0c;演示如何结合后端技术&#xff08;使用Spring Boot框架&#xff09;和前端技术&#xff08;使用Vue.js或React框架&#xff09;来实现数据可视化。我们将实现折线图、饼图和柱状图三种常见的数据展示方式&#xff…

黄子韬直播风暴揭秘经济人风波

黄子韬直播风暴&#xff1a;揭秘经纪人风波&#xff0c;真诚道歉小马丁6月27日晚&#xff0c;娱乐圈再次掀起波澜&#xff0c;黄子韬在直播中罕见地谈及了去年那场业界的经纪人风波&#xff0c;并意外地再次回应了与DJ小马丁的演出争议&#xff0c;这无疑让广大粉丝和网友们热血…

葡萄串目标检测YoloV8——从Pytorch模型训练到C++部署

文章目录 软硬件准备数据准备数据处理脚本模型训练模型部署数据分享软硬件准备 训练端 PytorchultralyticsNvidia 3080Ti部署端 fastdeployonnxruntime数据准备 用labelimg进行数据标注 数据处理脚本 xml2yolo import os import glob import xml.etree.ElementTree as ETxm…

SpringBoot-SpringBoot中文文档

简介 Spring Boot是由Pivotal团队提供的一套开源框架&#xff0c;可以简化spring应用的创建及部署。它提供了丰富的Spring模块化支持&#xff0c;可以帮助开发者更轻松快捷地构建出企业级应用。Spring Boot通过自动配置功能&#xff0c;降低了复杂性&#xff0c;同时支持基于J…

【51单片机入门】矩阵键盘

文章目录 前言矩阵键盘介绍与检测原理原理图代码讲解总结 前言 在嵌入式系统设计中&#xff0c;键盘输入是一种常见的人机交互方式。其中&#xff0c;矩阵键盘因其简单、方便和易于扩展的特性&#xff0c;被广泛应用于各种设备中。本文将介绍如何使用51单片机来实现矩阵键盘的…

若依 ruoyi 分离版 vue 简单的行内编辑实现

需要实现的效果&#xff1a;双击文本 - 修改文本 - 保存修改。 原码&#xff1a;仅文本显示文字内容 <el-table-column label"商品" align"center" prop"goodsName" width"200" v-if"columns[1].visible" /> 实现…

气膜仓库的优势与应用—轻空间

随着现代物流和存储需求的不断增长&#xff0c;传统仓库的建设和运营成本日益增加&#xff0c;企业需要寻找更加灵活、高效和经济的解决方案。在这种背景下&#xff0c;气膜仓库作为一种新型仓储形式&#xff0c;以其独特的优势和广泛的应用前景&#xff0c;逐渐受到市场的青睐…

打开数据结构的大门——顺序表详解

前言&#xff1a; 小编在近日刚开始学顺序表&#xff0c;为了巩固学习&#xff0c;小编先写一篇关于顺序表的文章来加强记忆&#xff0c;写完这一篇我将继续书写C语言相关的文章&#xff0c;那么废话不多说&#xff0c;下面小编将打开数据结构的大门&#xff01;顺序表来喽&…

视频监控业务平台LntonCVS国标视频综合管理平台功能及技术优势

随着安防行业的快速进步&#xff0c;传统的视频监控平台正在与先进的技术和互联网技术融合&#xff0c;包括5G通信、GIS、大数据、云计算、边缘计算、AI识别、智能分析和视频直播等。这些技术的整合形成了综合性视频监控管理平台&#xff0c;具备集中管理、多级联网共享、互联互…