# 迷宫寻路 ## 题目描述 机器猫被困在一个矩形迷宫里。 迷宫可以视为一个 $n\times m$ 矩阵,每个位置要么是空地,要么是墙。机器猫只能从一个空地走到其上、下、左、右的空地。 机器猫初始时位于 $(1, 1)$ 的位置,问能否走到 $(n, m)$ 位置。 ## 输入格式 第一行,两个正整数 $n,m$。 接下来 $n$ 行,输入这个迷宫。每行输入一个长为 $m$ 的字符串,`#` 表示墙,`.` 表示空地。 ## 输出格式 仅一行,一个字符串。如果机器猫能走到 $(n, m)$,则输出 `Yes`;否则输出 `No`。 ## 样例 #1 ### 样例输入 #1 ``` 3 5 .##.# .#... ...#. ``` ### 样例输出 #1 ``` Yes ``` ## 提示 #### 样例解释 路线如下:$(1,1)\to (2,1) \to (3,1) \to (3,2)\to (3,3) \to (2, 3) \to (2, 4) \to (2, 5) \to (3, 5)$ #### 数据规模与约定 对于 $100\%$ 的数据,保证 $1 \leq n, m \leq 100$,且 $(1,1)$ 和 $(n, m)$ 均为空地。
时间: 2024-04-07 20:32:38 浏览: 61
migongwenti.rar_M?n_迷宫问题
以下是迷宫寻路的 Python 代码实现:
```python
n, m = map(int, input().split())
maze = []
for i in range(n):
row = input().strip()
maze.append(row)
# 定义四个方向的移动
dx = [-1, 0, 1, 0]
dy = [0, 1, 0, -1]
# 记录已经访问的位置
visited = [[False] * m for _ in range(n)]
# DFS 遍历
def dfs(x, y):
if x == n - 1 and y == m - 1:
return True
visited[x][y] = True
for i in range(4):
nx, ny = x + dx[i], y + dy[i]
if nx < 0 or nx >= n or ny < 0 or ny >= m:
continue
if maze[nx][ny] == '#' or visited[nx][ny]:
continue
if dfs(nx, ny):
return True
return False
if dfs(0, 0):
print('Yes')
else:
print('No')
```
算法思路:
这道题可以使用 DFS(深度优先搜索)来解决。从起点开始,按照上、下、左、右的顺序,遍历相邻的节点,如果能够到达终点,则返回 True。如果所有相邻节点都不能到达终点,则返回 False。在遍历过程中,需要记录已经访问过的节点,以避免重复访问。
阅读全文