【发布时间】:2020-11-13 23:16:45
【问题描述】:
假设我们有一个n x m 矩阵,其中的单元格要么是空的,要么是满的。左上角和右下角的单元格都是空的。您可以向上、向下、向左或向右移动。查看长度为<= T 的空单元格的路径是否连接左上角和右下角的最快方法是什么?我已经尝试了 DFS 和 BFS,并使用一个矩阵来跟踪到达特定单元格所花费的时间,但是这两种方法都太慢了。
编辑:我无法再访问代码,但这是我所做的伪代码。
def find_path(grid, T):
visited = array(grid.dims)
visited.fill(0)
stack = []
stack.append((0, 0, T))
while len(queue) > 0:
pos = stack.pop()
if pos[0] == len(grid) and pos[1] == len(grid[0]):
return True
if pos[2] > 0:
if pos[0] < len(grid)-1 and grid[pos[0]+1][pos[1]] == empty and visited[pos[0]+1][pos[1]] < T-1:
visited[pos[0]+1][pos[1]] = T-1
stack.append(pos[0]+1, pos[1], T-1)
{same for right, left, up}
return False
【问题讨论】:
-
这两种方法都应该非常快。你一定在实现中做错了什么。哪个更快取决于矩阵的内容,但对于随机输入,DFS 平均会快一点,但 BFS 会找到最短路径。
-
我就是这么想的!两者的实现都非常简单,我什至递归和迭代地实现了 DFS,但是在同一测试用例子集上超过了时间限制。
-
如果您发布最简单的实现,这里的人们会很乐意向您展示它的缺陷所在。通常此类问题的 TLE 来自未能跟踪和避免以前访问过的单元格。
-
DFS 应该可以正常工作,在此处添加您的代码以便解决问题
标签: algorithm