dfs(十)矩阵最长递增路径 (注意dfs前后状态的更新)

news2024/12/23 6:42:02

描述

给定一个 n 行 m 列矩阵 matrix ,矩阵内所有数均为非负整数。 你需要在矩阵中找到一条最长路径,使这条路径上的元素是递增的。并输出这条最长路径的长度。

这个路径必须满足以下条件:

1. 对于每个单元格,你可以往上,下,左,右四个方向移动。 你不能在对角线方向上移动或移动到边界外。

2. 你不能走重复的单元格。即每个格子最多只能走一次。

 

int nextp[4][2] = {{0,1},{0,-1},{1,0},{-1,0}};
class Solution {
public:
    int res = 0;
    vector<int> temp;
    void dfs(vector<vector<int>>& matrix, vector<vector<bool>>& book, int curX, int curY, int row, int col)
    {
        book[curX][curY] = true;
        temp.push_back(matrix[curX][curY]);
        if(res < temp.size())
            res = temp.size();
        for(int i = 0; i < 4; i++)
        {
            int newX = curX + nextp[i][0];
            int newY = curY + nextp[i][1];
            if(newX<0 || newX>=row
            || newY<0 || newY>=col)
                continue;
            if(book[newX][newY]==false && matrix[newX][newY]>matrix[curX][curY])
            {
                dfs(matrix, book, newX, newY, row, col);
            }
        }
        book[curX][curY] = false;
        temp.pop_back();
    }
    int solve(vector<vector<int> >& matrix) {
        // write code here
        int row = matrix.size();
        int col = matrix[0].size();
        vector<vector<bool>> book(row, vector(col, false));
        for(int i = 0; i < row; i++)
        {
            for(int j = 0; j < col; j++)
            {
                dfs(matrix, book, i, j, row, col);
            }
        }
        return res;
    }
};

数据范围:1≤n,m≤10001≤n,m≤1000,0≤matrix[i][j]≤10000≤matrix[i][j]≤1000

进阶:空间复杂度 O(nm)O(nm) ,时间复杂度 O(nm)O(nm)

例如:当输入为[[1,2,3],[4,5,6],[7,8,9]]时,对应的输出为5,

其中的一条最长递增路径如下图所示:

示例1

输入:

[[1,2,3],[4,5,6],[7,8,9]]

返回值:

5

说明:

1->2->3->6->9即可。当然这种递增路径不是唯一的。       

示例2

输入:

[[1,2],[4,3]]

返回值:

4

说明:

 1->2->3->4   

备注:

矩阵的长和宽均不大于1000,矩阵内每个数不大于1000

 

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

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

相关文章

全解析 ESM 模块语法,出去还是进来都由你说了算

模块语法是ES6的一个重要特性&#xff0c;它的出现让JavaScript的模块化编程成为了可能。 在JavaScript中可以直接使用import和export关键字来导入和导出模块&#xff0c;但是这种语法并不是ES6的标准&#xff0c;而是ESM&#xff08;ECMAScript Module&#xff09;模块语法的…

【CICD】Jenkins 构建部署前端项目

出于对 CICD 的研究与学习&#xff0c;在初步学习了解并安装 jenkins 后&#xff0c;记录一下对于使用 jenkins 部署前端项目的过程。 1.目标 希望能够实现的是&#xff1a;在本地使用 git 工具将项目代码推送到远程仓库&#xff08;本篇使用 gitee 演示&#xff09;&#xf…

[C][KEIL5][IAR] 全局取消结构体对齐

文章目录一、 正常编译&#xff1a;二、 -fpack-struct 全局取消结构体对齐三、 结论&#xff1a;结构体字节不进行对齐的用途&#xff08;1&#xff09;减小内存占用的空间&#xff08;2&#xff09;直接将结构体作为通信协议&#xff08;在低带宽下通讯&#xff09;&#xff…

【Java】代码块的细节你搞懂了吗(基础知识七)

希望像唠嗑一样&#xff0c;one step one futher。 目录 &#xff08;1&#xff09;代码块的应用场景 &#xff08;2&#xff09;代码块的细节 1.static 代码块只加载一次 2.当调用类的静态成员时&#xff0c;类会加载 3. 使用类的静态成员时&#xff0c;static代码块会被执…

大数据第一轮复习笔记

linux: 添加用户 useradd 删除用户 userdel useradd -d指定组 添加组 groupadd 删除组 groupdel 创建目录 mkdir -p 删除目录 rm -rf 创建目录 touch cat -n 查看文件(显示行号)

Axure 9 收录不同效果的制作过程

效果类别 一、默认选中实现单选效果 1、默认选中 点击组件&#xff0c;右键选择selected字样&#xff1b; 2、实现单选效果 点击所有组件&#xff0c;右键选择selected group&#xff0c;填好命名&#xff0c;并设置选中时的组件样式&#xff1b;选择其中一个组件&#xf…

EMQX Cloud Serverless 正式上线:三秒部署、按量计费的 MQTT Serverless 云服务

近日&#xff0c;全球领先的开源物联网数据基础设施软件供应商 EMQ 正式发布了 MQTT Serverless 云服务 —— EMQX Cloud Serverless 的 Beta 版本&#xff0c;开创性地采用弹性多租户技术&#xff0c;用户无需关心服务器基础设施和服务规格伸缩所需资源&#xff0c;仅用三秒即…

十个程序员编程时的简单方法与技巧

你要记住&#xff0c;你写的代码是给人看的 作为一名程序员&#xff0c;希望在你某天离开公司后回想起的若干个开心时刻中&#xff0c;有一个会是因为你面对自己刚刚出炉了一份让自己心动的代码的那份感动&#xff0c;而不要成为上面提到的那个“离开后&#xff0c;公司才知道…

day11_面向对象

今日内容 零、 复习昨日 一、一日一题(数组,OOP) 二、面向对象练习&#xff08;方法参数返回值&#xff09; 三、局部变量&成员变量 四、this关键字 五、构造方法 六、重载 七、封装 小破站同步上课视频: https://space.bilibili.com/402601570/channel/collectiondetail?…

Spring MVC

一、Spring MVC介绍 a. Spring MVC是一个Web框架 b. Spring MVC是基于Servlet API构成的 MVC 是 Model View Controller 的缩写。 MVC 是⼀种思想&#xff0c;⽽ Spring MVC 是对 MVC 思想的具体实现。 学习Spring MVC目标&#xff1a; a.连接功能&#xff1a;将用户&#xff…

JSON学习笔记

♥课程链接&#xff1a;【狂神说Java】一小时掌握JSON_哔哩哔哩_bilibili配套的当然还要学习ajax不管是前端后端&#xff0c;感觉这部分内容是必须的&#xff0c;不然真的做项目的时候云里雾里。总体json的内容不多&#xff0c;具体就&#xff1a;1. 列表、对象等语法格式2. js…

C++复习笔记9

STL中的list的部分实现&#xff0c;包括了迭代器的整体实现思想和空间配置器的部分功能。 main.cpp //STL中的list是一个双向循环链表 #define _CRT_SECURE_NO_WARNINGS #include<iostream> #include"mymemory.h" using namespace std;class String { public:…

Python 数据可视化的 3 大步骤,你知道吗?

Python实现可视化的三个步骤&#xff1a; 确定问题&#xff0c;选择图形转换数据&#xff0c;应用函数参数设置&#xff0c;一目了然 1、首先&#xff0c;要知道我们用哪些库来画图? matplotlib Python中最基本的作图库就是matplotlib&#xff0c;是一个最基础的Python可视…

上海亚商投顾:沪指震荡上行 大消费板块全线走强

上海亚商投顾前言&#xff1a;无惧大盘涨跌&#xff0c;解密龙虎榜资金&#xff0c;跟踪一线游资和机构资金动向&#xff0c;识别短期热点和强势个股。市场情绪三大指数今日震荡反弹&#xff0c;沪指全天低开高走&#xff0c;深成指、创业板指均涨超1%。工程机械板块集体大涨&a…

nodejs学习笔记1.2

1、made \\ 中括号代表可选参数 、、、、 使用path模块处理路径拼接问题 、、、、 将/进行转义/ 、、、、 http模块 web服务器 、、、 创建最基本的web服务器 我表示醉了&#xff0c;之前都没有学到&#xff0c;难怪我学得糊里糊涂 req客户端 res…

00---C++入门

1. C关键字(C98) C总计63个关键字&#xff0c;C语言32个关键字 2. 命名空间 在C/C中&#xff0c;变量、函数和后面要学到的类都是大量存在的&#xff0c;这些变量、函数和类的名称将都存在于全局作用域中&#xff0c;可能会导致很多冲突。使用命名空间的目的是对标识符的名称进…

简单易用的以太网IO控制卡:C#读写测试

今天&#xff0c;正运动小助手给大家分享一下运动控制卡之ECIO系列IO卡的用法&#xff0c;C#语言进行ECI IO卡的开发以及测试多个IO读写的交互速度。 一、ECI0032/ECI0064 IO卡的硬件介绍 1.功能介绍 ECI0032/ECI0064等ECI0系列运动控制卡支持以太网、RS232通讯接口和电脑相…

A-Ops性能火焰图——适用于云原生的全栈持续性能监测工具

对于开发及运维人员来讲&#xff0c;火焰图是一个经典的定位性能问题的方法。利用火焰图可以可视化系统资源(cpu占用、内存占用、调度、IO等)的占用情况&#xff0c;从而帮助技术人员快速定位资源异常使用的代码级根因&#xff0c;或者观察潜在性能劣化趋势&#xff0c;进而优化…

2023最新简历模板免费下载

下面分享5个简历模板网站&#xff0c;免费下载&#xff0c;建议收藏&#xff01; 2023用最漂亮的简历模板&#xff0c;让面试官眼前一亮。 1、菜鸟图库 个人简历模板|WORD文档模板免费下载 - 菜鸟图库 菜鸟图库除了有超多设计类素材之外&#xff0c;还有很多办公类素材&#…

Multimap运用

Multimap概念:Multimap的特点其实就是可以包含有几个重复key的value值&#xff0c;你可以put进多个不同的value&#xff0c;但是key相同&#xff0c;但是又不是让后面的覆盖前面的内容.业务场景:当你需要构造像Map<K,List<V>> 或者Map(K,Set<V>)这样比较复杂…