https://www.jisuanke.com/course/34115/2205494 这题帮我写一份代码
时间: 2023-06-13 19:02:49 浏览: 126
这是一道基础的模拟题,可以按照题目要求进行模拟。以下是一份 Python 代码供参考:
```python
n, m = map(int, input().split())
# 初始化地图,用 0 表示空地,1 表示障碍物
map = [[0] * (m + 2) for _ in range(n + 2)]
for i in range(1, n + 1):
row = input()
for j in range(1, m + 1):
if row[j - 1] == '#':
map[i][j] = 1
# 初始化起点和终点
sx, sy, tx, ty = map(int, input().split())
# 定义四个方向向量
dx = [0, 1, 0, -1]
dy = [1, 0, -1, 0]
# 定义队列和标记数组
q = [(sx, sy)]
vis = [[False] * (m + 2) for _ in range(n + 2)]
vis[sx][sy] = True
# BFS 搜索
while len(q) > 0:
x, y = q.pop(0)
for i in range(4):
nx, ny = x + dx[i], y + dy[i]
if nx < 1 or nx > n or ny < 1 or ny > m:
continue
if vis[nx][ny] or map[nx][ny] == 1:
continue
vis[nx][ny] = True
q.append((nx, ny))
if nx == tx and ny == ty:
print("YES")
exit()
print("NO")
```
代码中使用了 BFS 算法,首先读入地图和起点终点坐标,然后将起点入队并标记为已访问,接着不断从队列中取出元素并向四个方向扩展,如果扩展的位置未越界且没有被访问过且不是障碍物,则将其入队并标记为已访问,如果扩展到了终点,则输出 YES 并退出程序,否则继续搜索直到队列为空。如果最终没有找到终点,则输出 NO。
阅读全文