当前位置: 首页 > news >正文

矩阵中的最长递增路径-记忆化搜索

矩阵中的最长递增路径


Solution

一个简单的dfs搜索问题,只需要改成一个带返回值的搜索即可,再加上一个缓存表优化即可通过。

#include<iostream>
#include<vector>
using namespace std;//递归做法
//f(x,y)表示从(x,y)出发的最长递增路径长度
//由于这题的路径自带单调性,所以不需要设置标记数组
int f1(vector<vector<int>>& matrix, int x, int y) {int m = matrix.size();int n = matrix[0].size();if (x < 0 || x >= m || y < 0 || y >= n) return 0;int ans1 = 0, ans2 = 0, ans3 = 0, ans4 = 0;if (x + 1 < m && matrix[x + 1][y] > matrix[x][y]) ans1 = f1(matrix, x + 1, y);if (x - 1 >= 0 && matrix[x - 1][y] > matrix[x][y])ans2 = f1(matrix, x - 1, y);if (y + 1 < n && matrix[x][y + 1] > matrix[x][y]) ans3 = f1(matrix, x, y + 1);if (y - 1 >= 0 && matrix[x][y - 1] > matrix[x][y]) ans4 = f1(matrix, x, y - 1);return 1 + max(ans1, max(ans2, max(ans3, ans4)));
}//带缓存表的递归
int f2(vector<vector<int>>& matrix, int x, int y, vector<vector<int>>& dp) {int m = matrix.size();int n = matrix[0].size();if (x < 0 || x >= m || y < 0 || y >= n) return 0;int ans1 = 0, ans2 = 0, ans3 = 0, ans4 = 0;if (dp[x][y] != -1) return dp[x][y];if (x + 1 < m && matrix[x + 1][y] > matrix[x][y]) ans1 = f2(matrix, x + 1, y, dp);if (x - 1 >= 0 && matrix[x - 1][y] > matrix[x][y])ans2 = f2(matrix, x - 1, y, dp);if (y + 1 < n && matrix[x][y + 1] > matrix[x][y]) ans3 = f2(matrix, x, y + 1, dp);if (y - 1 >= 0 && matrix[x][y - 1] > matrix[x][y]) ans4 = f2(matrix, x, y - 1, dp);int ans = 1 + max(ans1, max(ans2, max(ans3, ans4)));dp[x][y] = ans;return ans;
}
int longestIncreasingPath1(vector<vector<int>>& matrix) {int m = matrix.size();int n = matrix[0].size();int ans = 0;for (int i = 0; i < m; ++i) {for (int j = 0; j < n; ++j) {ans = max(ans, f1(matrix, i, j));}}return ans;
}
int longestIncreasingPath(vector<vector<int>>& matrix) {int m = matrix.size();int n = matrix[0].size();vector<vector<int>>dp(m + 1, vector<int>(n + 1, -1));int ans = 0;for (int i = 0; i < m; ++i) {for (int j = 0; j < n; ++j) {ans = max(ans, f2(matrix, i, j, dp));}}return ans;
}int main() {return 0;
}

http://www.lryc.cn/news/614353.html

相关文章:

  • Maven/Gradle常用命令
  • STM32CubeMX(十二)SPI驱动W25Qxx(Flash)
  • 恶臭气体在线监测仪器:实时、连续监测环境中恶臭气体浓度
  • c++初学day1(类比C语言进行举例,具体原理等到学到更深层的东西再进行解析)
  • (已解决)IDEA突然无法使用Git功能
  • 杂谈 001 · VScode / Copilot 25.08 更新
  • 关于“致命错误:‘https://github.com/....git/‘ 鉴权失败”
  • Spring Boot 结合 CORS 解决前端跨域问题
  • 《常见高频算法题 Java 解法实战精讲(3):排序与二叉树》
  • 2025小程序怎么快速接入美团核销,实现自动化核销
  • Ignite 资源注入核心:GridResourceProcessor 详解
  • Nestjs框架: 接口安全与响应脱敏实践 --- 从拦截器到自定义序列化装饰器
  • PEV2(PostgreSQL Explain Visualizer 2)
  • Windows 定时开关机终极指南
  • 为什么通过CreateThread创建的线程调用C/C++运行库函数不稳定
  • 代码随想录刷题Day26
  • 【Git】企业级使用
  • 路由器不能上网的解决过程
  • GPT-5与国内头部模型厂商主要能力对比
  • GPT-5 全面解析与 DeepSeek 实战对比:推理、工具调用、上下文与成本
  • 汽车电子:现代汽车的“神经中枢“
  • 宁商平台税务新政再升级:精准施策,共筑金融投资新生态
  • ubuntu alias命令使用详解
  • 仅需8W,无人机巡检系统落地 AI 低空智慧城市!可源码交付
  • WSL 安装 Ubuntu
  • HBase的异步WAL性能优化:RingBuffer的奥秘
  • 光猫、路由器和交换机
  • DuoPlus支持导入文件批量配置云手机参数,还优化了批量操作和搜索功能!
  • 快速上手 Ollama:强大的开源语言模型框架
  • git如何使用和操作命令?