解题思路: 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.0分

1 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论