当前位置: 首页 > 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.dtcms.com/a/321219.html

相关文章:

  • 【ESP32-menuconfig(1) -- Build Type及Bootloader config】
  • Vue 项目安全设置方案:XSS/CSRF 防护指南
  • 浅谈:如何复现修复Bug?
  • OpenCV 3 终极指南:创建炫酷自定义窗口与图像显示的艺术
  • 【代码随想录day 14】 力扣 111.二叉树的最小深度
  • Cesium 无人机视角飞行漫游,截屏
  • RabbitMQ详情介绍—七种工作模式
  • springmvc4+hibernate4整合框架的搭建
  • 库函数版独立按键用位运算方式实现(STC8)
  • Array Description(Dynamic programming)
  • 【网络编程】IO多路转接——epoll
  • Java文件读写(IO、NIO)
  • 第39周——训练自己的数据集
  • 汇编语言和高级语言的差异
  • BGP综合实验练习作业
  • Fabarta个人专属智能体:三维搜索链+动态大纲重构教材开发范式
  • Omron(欧姆龙)SysmacStudio软件下载,定期更新(最新更新到1.63升级包)
  • npm run 常见脚本
  • BGP协议笔记
  • 【新启航】航空飞机起落架深孔型腔的内轮廓测量方法探究 - 激光频率梳 3D 轮廓检测
  • 2025华数杯数学建模A题【 多孔膜光反射性能的优化与控制】原创论文讲解(含完整python代码)
  • 避免“卡脖子”!如何减少内存I/O延迟对程序的影响?
  • 机器学习——支持向量机(SVM)实战案例
  • 操作系统-实验-进程
  • 机器学习之支持向量机(原理)
  • svm的一些应用
  • 怎么查看Linux I2C总线挂载了那些设备?
  • springboot整合rabbitMQ的示例
  • Elasticsearch:在向量搜索中使用 Direct IO
  • 解码华为云安全“铁三角”:用“分层防御”化解安全挑战