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

类似题目:

相关推荐
handler013 小时前
从源码到二进制:深度拆解 Linux 下 C 程序的编译与链接全流程
linux·c语言·开发语言·c++·笔记·学习
寒秋花开曾相惜6 小时前
(学习笔记)4.1 Y86-64指令集体系结构(4.1.4 Y86-64异常&4.1.5 Y86-64程序)
开发语言·jvm·数据结构·笔记·学习
Theodore_10226 小时前
深度学习(15):倾斜数据集 & 精确率-召回率权衡
人工智能·笔记·深度学习·机器学习·知识图谱
不会聊天真君6476 小时前
JavaScript基础语法(Web前端开发笔记第三期)
前端·javascript·笔记
Fᴏʀ ʏ꯭ᴏ꯭ᴜ꯭.7 小时前
Redis主从复制配置全攻略
数据库·redis·笔记
海绵宝宝的月光宝盒8 小时前
2-非金属材料
经验分享·笔记·学习·其他·职场和发展·课程设计·制造
zzh0819 小时前
GluserFS笔记
笔记
三品吉他手会点灯10 小时前
C语言学习笔记 - 9.C概述 - 常见问题答疑
c语言·笔记·学习
网络工程小王11 小时前
【hermes多智能体协作】个人学习笔记
笔记·学习·ai·智能体·hermes
Star Learning Python11 小时前
20260422-《我不擅长的生活》
笔记·生活