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

类似题目:

相关推荐
hengcaib1 小时前
防封号电销外包公司怎么选合规线路与风控核查方法
笔记
六点_dn4 小时前
Linux学习笔记-shell运算符
linux·笔记·学习
降临-max5 小时前
软件测试基础---项目实战
软件测试·笔记·功能测试·测试用例
鱼子星_6 小时前
【C++】内存管理:内存分布,new/delete的使用及细节处理,new/delete的底层,定位new表达式
开发语言·c++·笔记
愚昧之山绝望之谷开悟之坡6 小时前
回购逆回购
笔记
鱼子星_6 小时前
【C++】string(上):string的基本使用
c++·笔记·字符串
AOwhisky6 小时前
Python 学习笔记(第四期)——字符串:格式化、操作与文本处理——核心知识点自测与详解
开发语言·笔记·python·学习·列表·元组·字典
chnyi6_ya6 小时前
论文阅读笔记 | VIDEOPHY: Evaluating Physical Commonsense for Video Generation
论文阅读·笔记
AOwhisky7 小时前
Python 学习笔记(第六期)——函数:定义、参数传递与作用域
笔记·python·学习·云原生·运维开发·函数·参数传递
玖玥拾7 小时前
Unity 3D 基础(一)Unity基础架构、物理系统、视觉渲染、空间变换与对象查询
笔记·游戏·3d·unity·游戏引擎