You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求带障碍网格寻路DFS算法的时间复杂度

关于算法实现的相关问题解答

一、是否属于记忆化搜索

不属于标准记忆化搜索。
常规记忆化搜索的核心逻辑是:每个状态的结果一旦计算完成就永久固定,后续遇到相同状态直接读取缓存返回,不会重复计算,比如你提到的记忆化斐波那契就是典型案例。
你当前的实现只能算作路径剪枝优化:只有当新路径的步数小于当前格子已存储的步数时,才会更新并继续递归,只是过滤了明显更差的路径,同一个格子可能会被多次更新、多次触发后续递归,不符合记忆化的特征。

二、时间复杂度分析

  1. 最坏理论上限确实是你猜测的O(4^(row*col)):如果剪枝逻辑完全失效,比如每次到达同一格子的步数都比之前的存储值更小,每次都要触发四个方向的递归,就会达到这个指数级复杂度。
  2. 实际运行效率远高于最坏上限:因为剪枝规则的存在,只要新路径的步数大于等于当前格子的已知最小步数就会直接返回,不会继续递归。对于无特殊构造的普通网格,每个格子通常只会被更新1到3次,实际运行效率接近O(row*col)。
  3. 注意该算法的最坏复杂度仍然是指数级,并不适合作为网格最短路径的标准解法,面试场景下这类网格最短路径题的最优方案是BFS,时间复杂度稳定为O(row*col),天然按步数从小到大遍历,第一次到达终点的步数就是最小值,不需要重复更新单元格。

三、代码中的明显错误

你提供的代码存在几处语法和逻辑错误,会导致运行失败:

  • 所有出现grid[row][cell]的位置,cell应为col,属于变量名书写错误
  • newStep == currStep+1、grid[row][cell] == currStep+1两处是赋值逻辑,应该用单等号=而非双等号==
  • 边界判断逻辑错误:row > lenRow || col > lenCol应改为row >= lenRow || col >= lenCol,数组下标从0开始,合法最大值为长度减1

内容的提问来源于stack exchange,提问作者Rajan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 07:06:05