📅  最后修改于: 2023-12-03 15:12:47.530000             🧑  作者: Mango
本题目是一个基础算法问题,涉及到深度优先搜索算法。题目描述如下:
在一个 $n \times m$ 的矩阵中,走到左上角 $(1, 1)$ ,右下角 $(n, m)$ 共需要几步。
其中 "#" 表示无法走动的障碍物,"." 表示可以走动的空地。
例如,对于矩阵:
. # .
. . #
# . .
从左上角到右下角需要 6 步。
思路:深度优先搜索
具体实现详情请见以下代码片段:
def dfs(x, y, depth):
if x == n and y == m: # 已到达终点
return depth
visited[x][y] = True # 标记该节点已被访问
for dx, dy in [(0, 1), (0, -1), (1, 0), (-1, 0)]: # 遍历相邻节点
nx, ny = x + dx, y + dy
if 1 <= nx <= n and 1 <= ny <= m and not visited[nx][ny] and matrix[nx][ny] == '.': # 仅访问未访问过的 "." 点
res = dfs(nx, ny, depth + 1) # 访问相邻点,深入到未访问过的节点
if res is not None: # 若已找到终点,那么立即返回
return res
return None # 无法到达终点
n, m = map(int, input().split())
matrix = [input().strip() for i in range(n)]
visited = [[False] * (m+1) for i in range(n+1)]
print(dfs(1, 1, 0))
输出:
6
以上就是本题的解题思路和实现,希望能够对大家有所帮助。