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

元宝 思考 LeetCode 2328.网站图中递增路径的数目 C++实现

以下是用 C++ 实现的 LeetCode 2328 题解,使用记忆化搜索(DFS + 记忆化)计算严格递增路径的数目:

class Solution { int mod = 1e9 + 7; vector<vector<int>> dp; int m, n; int dirs[4][2] = {{-1, 0}, {1, 0}, {0, -1}, {0, 1}}; int dfs(vector<vector<int>>& grid, int i, int j) { if (dp[i][j] != 0) return dp[i][j]; long long count = 1; // 路径至少包含当前单元格 for (auto& dir : dirs) { int ni = i + dir[0]; int nj = j + dir[1]; if (ni >= 0 && ni < m && nj >= 0 && nj < n && grid[ni][nj] > grid[i][j]) { count = (count + dfs(grid, ni, nj)) % mod; } } return dp[i][j] = count; } public: int countPaths(vector<vector<int>>& grid) { m = grid.size(); n = grid[0].size(); dp.assign(m, vector<int>(n, 0)); long long ans = 0; for (int i = 0; i < m; i++) { for (int j = 0; j < n; j++) { ans = (ans + dfs(grid, i, j)) % mod; } } return ans; } };

算法思路:

  1. 问题理解:将矩阵视为有向无环图,每个单元格是一个节点,若相邻单元格的值严格大于当前单元格,则存在有向边。计算从任意单元格开始的所有严格递增路径数。

  2. 记忆化搜索

    • 定义dp[i][j]表示以(i, j)为起点的严格递增路径数目(包括自身)。

    • 对于每个单元格,初始化路径数为 1(只包含自己),然后遍历四个方向,若相邻单元格值更大,则将其路径数累加到当前单元格。

    • 使用递归计算并缓存结果,避免重复计算。

  3. 时间复杂度:O(m * n),每个单元格计算一次。

  4. 空间复杂度:O(m * n),用于存储dp数组。

关键点

  • 严格递增保证了图中无环,记忆化搜索不会陷入无限递归。

  • 对 1e9+7 取模防止溢出。

  • 通过遍历所有单元格并累加dfs结果得到总路径数。

http://www.jsqmd.com/news/820755/

相关文章:

  • 超简单!天猫购物卡回收最快方法分享 - 团团收购物卡回收
  • Python单元测试与Mock技术
  • 自动化测试(十五) 自动化测试平台化-从脚本到CI-CD质量门禁
  • PCF8591模数转换器实战指南:从I2C通信到多通道数据采集
  • 终极Cookie本地导出指南:如何安全获取cookies.txt文件
  • 2026 南京国贸大厦纹眉深度测评:本土直营标杆,纹绣世家 4 大门店技术 / 审美 / 安全全优 - 小艾信息发布
  • 3D打印衍射光栅:低成本实现虹彩表面处理技术
  • 驾驶舱前端设计方案:从“花架子”到“真能用”的组件化实战
  • 2026年成都老牌GEO公司全景解析,权威榜单带你一览行业风采! - 品牌推荐官方
  • 这份「疫苗发布和接种预约系统」源码和论文,适合正在赶项目的同学收藏!
  • ofd.js终极指南:在浏览器中直接渲染OFD文档的完整解决方案
  • 玻璃钢管道技术解析与合规厂家选型实用指南 - 奔跑123
  • 哈尔滨钢结构专项分包工程公司综合实力排行盘点 - 奔跑123
  • 日常记录:SQL学习总结
  • 科技
  • 实战解析:XiaoMusic技术架构深度剖析与智能音箱语音控制实现方案
  • 2026年度盘点!10款好用的降AI工具,AI率一键降至9% - 降AI实验室
  • 这份「基于SpringBoot的疾病防控综合系统」源码和论文,适合做公共卫生类毕设参考!
  • 工业喷淋塔技术选型与实测指南 适配多工况需求 - 奔跑123
  • 天猫超市购物卡如何高价回收? - 团团收购物卡回收
  • JL-01多通道温湿度记录仪:环境监测的得力助手
  • 终极英雄联盟自动BP与战绩查询工具:Seraphine完全指南
  • 工作3年的Python程序员,转大模型开发,我总结的所有实战技巧
  • 终极指南:如何免费解锁WeMod高级功能并增强游戏体验
  • libutp 性能分析总结
  • 你真的理解 volatile 关键字了吗?
  • Spring Boot 3 全局异常处理终极指南(附完整代码架构),拿走即用
  • 如何摆脱游戏卡顿困扰:DLSS Swapper的智能性能管理方案
  • 为什么FreeBSD和苹果都爱用Clang?聊聊它的模块化设计与商业友好性
  • 优雅进程终止:Go工具halt的设计原理与实战应用