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

类似题目:

相关推荐
Hello_Embed17 小时前
嵌入式上位机开发入门(三):TCP 编程 —— Server 端实现
笔记·单片机·网络协议·tcp/ip·嵌入式
talen_hx29617 小时前
《零基础入门Spark》学习笔记 Day 11
笔记·学习·spark
ZhiqianXia18 小时前
gem5 模拟器学习笔记(1):核心术语整理
笔记·学习
凌波粒20 小时前
D2L学习笔记:安装、张量与数据处理
笔记·python·学习·pandas
taoqick20 小时前
FIPO粗读笔记
笔记
半壶清水21 小时前
[软考网规考点笔记]-局域网之以太网标准
网络·笔记·网络协议·考试
忙什么果21 小时前
transformer学习笔记2
笔记·学习·transformer
ZhiqianXia21 小时前
Gem5 学习笔记(2) : Gem5 建模要点与基本思路
笔记·学习
_李小白1 天前
【OSG学习笔记】Day 25: OSG 设计架构解析
笔记·学习·架构
后藤十八里1 天前
维普期刊逆向笔记
javascript·笔记·js逆向