解题思路: bfs 建议看b站这个视频
https://www.bilibili.com/video/BV1CM4y1o7nZ/?spm_id_from=333.880.my_history.page.click&vd_source=b93da48f51cf32a81aabe9bda3bf5a2c
注意事项:
参考代码:
t = int(input())
while t:
n, m = map(int, input().split())
arr = []
for _ in range(n):
a = list(i for i in str(input()))
arr.append(a)
arr_0 = [[0] * m for _ in range(n)]
queue = [] # queue记录每个点的位置i,j和第n步
for i in range(n):
for j in range(m):
if arr[i][j] == "S":
arr_0[i][j] = 1
queue.append([i, j, 0]) # 先把起点[i,j,0]记录进queue,起点看作走了0步
if arr[i][j] == "E":
e1, e2 = i, j # 终点的坐标[e1, e2]
dir = [(1, 0), (-1, 0), (0, 1), (0, -1)]
while len(queue): # 重点是这个while循环,搞清楚这一块就可以啦
x, y = queue[0][0], queue[0][1]
# print(queue)
if x == e1 and y == e2:
print(queue[0][-1]) # 打印走到终点的步数
break
for i in range(4):
nx, ny = x + dir[i][0], y + dir[i][1]
if 0 <= nx < n and 0 <= ny < m and arr_0[nx][ny] == 0 and (arr[nx][ny] == "-" or arr[nx][ny] == "E"):
queue.append([nx, ny, queue[0][-1] + 1])
arr_0[nx][ny] = 1
queue.pop(0)
while len(queue) == 0:
print(-1)
break
t -= 1
0.0分
1 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复