LeetCode刷题--- 不同路径 III

个人主页:元清加油_【C++】,【C语言】,【数据结构与算法】-CSDN博客

个人专栏

力扣递归算法题

 http://t.csdnimg.cn/yUl2I

【C++】    

​​​​​​http://t.csdnimg.cn/6AbpV

数据结构与算法

 ​​​http://t.csdnimg.cn/hKh2l


前言:这个专栏主要讲述递归递归、搜索与回溯剪枝算法,所以下面题目主要也是这些算法做的  

我讲述题目会把讲解部分分为3个部分:
1、题目解析

2、算法原理思路讲解

3、代码实现


不同路径 III

题目链接:不同路径 III

题目

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

  • 1 表示起始方格。且只有一个起始方格。
  • 2 表示结束方格,且只有一个结束方格。
  • 0 表示我们可以走过的空方格。
  • -1 表示我们无法跨越的障碍。

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

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

示例 1:

输入:[[1,0,0,0],[0,0,0,0],[0,0,2,-1]]
输出:2
解释:我们有以下两条路径:
1. (0,0),(0,1),(0,2),(0,3),(1,3),(1,2),(1,1),(1,0),(2,0),(2,1),(2,2)
2. (0,0),(1,0),(2,0),(2,1),(1,1),(0,1),(0,2),(0,3),(1,3),(1,2),(2,2)

示例 2:

输入:[[1,0,0,0],[0,0,0,0],[0,0,0,2]]
输出:4
解释:我们有以下四条路径: 
1. (0,0),(0,1),(0,2),(0,3),(1,3),(1,2),(1,1),(1,0),(2,0),(2,1),(2,2),(2,3)
2. (0,0),(0,1),(1,1),(1,0),(2,0),(2,1),(2,2),(1,2),(0,2),(0,3),(1,3),(2,3)
3. (0,0),(1,0),(2,0),(2,1),(2,2),(1,2),(1,1),(0,1),(0,2),(0,3),(1,3),(2,3)
4. (0,0),(1,0),(2,0),(2,1),(1,1),(0,1),(0,2),(0,3),(1,3),(1,2),(2,2),(2,3)

示例 3:

输入:[[0,1],[2,0]]
输出:0
解释:
没有一条路能完全穿过每一个空的方格一次。
请注意,起始和结束方格可以位于网格中的任意位置。

提示:

  • 1 <= grid.length * grid[0].length <= 20

解法

题目解析

  • 1 表示起始方格。且只有一个起始方格。
  • 2 表示结束方格,且只有一个结束方格。
  • 0 表示我们可以走过的空方格。
  • -1 表示我们无法跨越的障碍。
  • 返回在四个方向(上、下、左、右)上行走时,从起始方格到结束方格的不同路径的数目
  • 每一个无障碍方格都要通过一次,但是一条路径中不能重复通过同一个方格

算法原理思路讲解

设计代码

(1)全局变量

bool visit[20][20];
int ret;
int step;
int dx[4] = { 0, 0, -1, 1 };
int dy[4] = { 1, -1, 0, 0 };
  • ret(用于记录符合的次数)
  • step(所有的步数和)
  • visit(二位数组中的元素是否被用过)
  • dx[4](用于计算)
  • dy[4](用于计算)

(2)设计递归函数

void dfs(vector<vector<int>>& grid, int x, int y, int path);
  • 参数:x(当前需要进⾏处理的元素横坐标),y(当前需要进⾏处理的元素横坐标),path(当前已经处理的步数和);
  • 返回值:无 ;
  • 函数作用:判断当前位置的四个⽅向是否可以添加⾄当前状态,查找在满⾜条件下从起始⽅格到结束⽅格的不同路径的数⽬。

代码实现

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

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

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

相关文章

基于 LangChain + GLM搭建知识本地库

一种利用 langchain 思想实现的基于本地知识库的问答应用&#xff0c;目标期望建立一套对中文场景与开源模型支持友好、可离线运行的知识库问答解决方案。 受GanymedeNil的项目document.ai和AlexZhangji创建的ChatGLM-6B Pull Request启发&#xff0c;建立了全流程可使用开源模…

Python中JSON模块的使用

1 JSON简介 JSON是JavaScript Object Notation即Javascript对象简谱的缩写。JSON是一种轻量级的数据交换格式&#xff0c;JSON数据是由键值对组成的结构&#xff0c;与Python中的字典类似&#xff0c;由尖括号包围的键值对组成&#xff0c;键和值的类型可以是字符串、数字、布…

【华为机试】2023年真题B卷(python)-滑动窗口最大值

一、题目 题目描述&#xff1a; 有一个N个整数的数组&#xff0c;和一个长度为M的窗口&#xff0c;窗口从数组内的第一个数开始滑动直到窗口不能滑动为止&#xff0c; 每次窗口滑动产生一个窗口和&#xff08;窗口内所有数的和&#xff09;&#xff0c;求窗口滑动产生的所有窗口…

Python为何适合开发AI项目?

Python在人工智能&#xff08;AI&#xff09;项目中的流行和广泛应用归因于多个因素&#xff0c;其中一些主要原因包括&#xff1a; 1、易学易用&#xff1a; Python语法简洁清晰&#xff0c;易于学习和理解。这使得新手能够更容易上手&#xff0c;并且对于处理复杂的AI算法和…

GitHub Copilot的快速入门

GitHub Copilot 是一个由 OpenAI 和 GitHub 合作开发的人工智能编程助手&#xff0c;它可以帮助你更快地编写代码。要开始使用 GitHub Copilot&#xff0c;请按照以下步骤操作&#xff1a; 安装 GitHub Copilot&#xff1a; 首先&#xff0c;确保你已经安装了 Visual Studio Co…

电缆厂 3D 可视化管控系统 | 图扑数字孪生

图扑软件(Hightopo)专注于 Web 的 2D&3D 可视化&#xff0c;自主研发 2D&3D 图形渲染引擎、数据孪生应用开发平台和开发工具&#xff0c;广泛应用于 2D&3D 可视化、工业组态与数字孪生领域&#xff0c;图扑软件为工业物联网、楼宇、场馆、园区、数据中心、工厂、电…

shell编程一

shell 定义 Shell 也是一种程序设计语言&#xff0c;它有变量&#xff0c;关键字&#xff0c;各种控制语句&#xff0c;有自己的语法结构&#xff0c;利用shell程序设计语 可以编写功能强、代码简短的程序 #! Shebang 定义解释器 shell的分类和切换 # cat /etc/shells /bin/sh…

C语言学习----存储类别

存储类别 &#x1f33f;本文是C Primer Pluse 中文版第12章的部分内容整理 &#x1f331;主要是围绕C中作用域 链接 存储期 展开 &#xff0c;是后面进行多文件管理的基础~ &#x1f308;概要 &#x1f34e;明确对象 变量名 标识符的基本概念和含义 &#x1f350;作用域和链接描…

ES6之Reflect详解

✨ 专栏介绍 在现代Web开发中&#xff0c;JavaScript已经成为了不可或缺的一部分。它不仅可以为网页增加交互性和动态性&#xff0c;还可以在后端开发中使用Node.js构建高效的服务器端应用程序。作为一种灵活且易学的脚本语言&#xff0c;JavaScript具有广泛的应用场景&#x…

MATLAB --- 如何对 hold on 和 hold off 绘制的图像进行保存

要将通过 hold on 和 hold off 绘制的图像保存起来&#xff0c;可以使用 saveas 函数 将图像保存为指定的文件格式 例如&#xff1a; % 在这里是你的绘图代码&#xff0c;包括 hold on 和 hold off% 保存图像 saveas(gcf, plot.png, png);参数&#xff1a; gcf&#xff1a; …

JVM老年代内存优化

参考&#xff1a; 老年代持续增长&#xff0c;无法触发 mixed gc 的解决方案_java老年代一直增长-CSDN博客 java老年代越来越大 jvm老年代爆满_mob64ca13f63f2c的技术博客_51CTO博客 【JVM调优】内存溢出CPU占用过高:问题排查解决方案复盘_wx5e479319a1db4的技术博客_51CTO博…

2023年度学习总结

想想大一刚开始在CSDN写作&#xff0c;这一坚持&#xff0c;就是我在CSDN的第九个年头&#xff0c;这也是在CSDN最有里程碑的一年&#xff0c;这一年我被评为CSDN的博客专家啦&#xff01;先是被评为Unity开发领域新星创作者&#xff0c;写的关于一部分Unity开发的心得获得大家…

MATLAB --- fullfile()函数的用法

fullfile() 是 MATLAB 中用于构建完整文件路径的函数, 它可以根据操作系统的不同自动选择适当的文件分隔符 用法&#xff1a; fullpath fullfile(folder, file1, file2, ...) 参数说明&#xff1a; folder&#xff1a;文件夹的路径file1, file2, ...&#xff1a;要连接到…

ES应用_ES实战

依靠知识库使用es总结一些使用技巧。 1 快速入门 ES是将查询语句写成类似json的形式&#xff0c;通过关键字进行查询和调用。 1.1 创建 下面创建了一个主分片为5&#xff0c;副本分片为1的ES结构。ES本身是一种noschema的结构&#xff0c;但是可以通过指定mapping编程schema的…

【深度学习:Convolutional Neural Networks】卷积神经网络入门指南

【深度学习&#xff1a;Convolutional Neural Networks】卷积神经网络入门指南 介绍为什么选择ConvNets而不是前馈神经网络&#xff1f;Input Image 输入图像基本架构Convolution Layer 卷积层 — 内核Pooling Layer 池化层Classification — Fully Connected Layer (FC Layer)…

《Webpack5 升级》- Vue2.x 组件库 Webpack3 升 5

前言 基于 Vue2.x 的项目和组件库开发于 2019 年 &#xff0c;那时对 Webpack 版本没有概念&#xff0c;项目和组件库的版本混乱…有的使用 v3&#xff0c;有的使用 v4… 对于现今 2023 年&#xff08;或 2024 年&#xff09;的整个生态环境是不够用的&#xff0c;无法使用较新…

如何加入到接单的大家庭,这个方法很简单~!方法A

第一步&#xff1a; 进某宝 搜 C语言代写 然后点销量 你把前4名的客服找到 问他们是某招技术 如果他们乐意&#xff0c;你就进他们的圈子。

Mybatis底层原理分析以及源码阅读

费话不多少先上图&#xff0c;我只喜欢画图分析&#xff0c;看图片&#xff1a; 有两个问题&#xff1a; 问题1&#xff1a; 我们一直在写Mapper/DAO只写了接口&#xff0c;没有写具体的实现吧&#xff1f; 【是的】 问题2&#xff1a; 没有写实现类就没办法实例化执行后续的操…

基于Matlab的各种图像滤波Filter算法(代码开源)

前言&#xff1a;本文为手把手教学 Matlab 平台下的各种图像滤波算法的教程&#xff0c;将编程代码与图像滤波知识相联系&#xff0c;以实战为例&#xff01;博客中图像滤波算法包含&#xff1a;均值滤波、中值滤波、高斯滤波、双边滤波、引导滤波。图像滤波算法是计算机视觉领…

【基础】【Python网络爬虫】【6.数据持久化】Excel、Json、Csv 数据保存(附大量案例代码)(建议收藏)

Python网络爬虫基础 数据持久化&#xff08;数据保存&#xff09;1. Excel创建数据表批量数据写入读取表格数据案例 - 豆瓣保存 Excel案例 - 网易新闻Excel保存 2. Json数据序列化和反序列化中文指定案例 - 豆瓣保存Json案例 - Json保存 3. Csv写入csv列表数据案例 - 豆瓣列表保…