R001 记忆化搜索 ABCPATH - SPOJ 有方向的搜索

例题:

题意:

给你一个二维字母网格图,求从字母 A 开始的最长连续字母路径长度,枚举方向包括水平、垂直和对角线。

特点:

  1. DFS参数:从根节点向周围扩散,取子节点返回的最大值作为当前的返回值。
  2. 搜索条件 :有明显的方向,比如这里 A -> B -> C -> D ··· ,可以不使用 vised 数组。可以理解为网格图上进行拓扑排序求最长路
  3. 关键优化 :存在重叠子问题需要记忆化

具体代码为

python 复制代码
memo = [[0] * m for _ in range(n)]  # 记忆化数组,标记这个位置已经更新
def dfs(i, j):
    if memo[i][j] != 0:
        return memo[i][j]
    res = 1
    for dx, dy in dirr:
        a, b = i + dx, j + dy
        if 0 <= a < n and 0 <= b < m:
            if ord(g[a][b]) == ord(g[i][j]) + 1:  # 保持有方向的搜索
                res = Max(res, 1 + dfs(a, b))  # 对子节点的贡献取max
    memo[i][j] = res
    return res

类似题目:

相关推荐
TANGLONG2229 分钟前
【C++】继承详解——基类/派生类、作用域、默认函数、菱形继承(超详细)
java·c语言·c++·经验分享·笔记·ajax
木木_王1 小时前
嵌入式学习 | STM32裸板驱动开发(Day01)入门学习笔记(超详细完整版|点灯实验 + 库函数代码 + 原理全解)
linux·驱动开发·笔记·stm32·学习
largecode1 小时前
能不能让座机号码显示“XX公司”那样的认证名称?申请号码认证方法
经验分享·笔记·音视频·课程设计·oneapi·segmentfault·微信开放平台
Hua-Jay2 小时前
OpenCV联合C++/Qt 学习笔记(十七)----凸包检测、直线检测及点集拟合
c++·笔记·qt·opencv·学习·计算机视觉
是喵斯特ya2 小时前
红日内网靶场1环境搭建
笔记
中屹指纹浏览器2 小时前
2026浏览器插件扩展安全风险溯源与环境隔离防护规范
经验分享·笔记
宵时待雨3 小时前
回溯算法专题1:递归
数据结构·c++·笔记·算法·leetcode·深度优先
今儿敲了吗3 小时前
面向对象(三)——设计模式
笔记·设计模式
是喵斯特ya3 小时前
红日内网靶场1渗透笔记
笔记·安全
一只机电自动化菜鸟3 小时前
一建机电备考笔记(34)焊接技术(设备与材料1)(含考频+题型)
笔记·学习·职场和发展·生活·学习方法