解题思路:通过队列,运用广度优先搜索

注意事项:在pycharm上这个代码会报错,但是提交以后是 正确的

参考代码:

from collections import deque


def dfs(gra):
   x1, y1 = index(gra,"@")
   x2, y2 = index(gra,"*")
   dx = [1, 0, -1, 0]
   dy = [0, 1, 0, -1]
   visited = [[False for _ in range(n)] for _ in range(m)]
   visited[x1][y1] = True
   queue = deque()
   queue.append((x1, y1, 0))
   while queue:
       curNode = queue.popleft()
       if curNode[0] == x2 and curNode[1] == y2:
           return curNode[2]

       for i in range(4):
           tx = curNode[0] + dx[i]
           ty = curNode[1] + dy[i]

           if 0 <= tx < m and 0 <= ty < n :
               if (gra[tx][ty] == "." or gra[tx][ty] == "*") and not visited[tx][ty]:
                   visited[tx][ty] = True
                   queue.append((tx, ty, curNode[2] + 1))
   return -1


def index(num,tar):
   for i in range(len(num)):
       for j in range(len(num[0])):
           if num[i][j] == tar:
               return i,j

while True:
   m, n = map(int, input().split())
   if m == 0 and n == 0:
       break
   gra = []
   for i in range(m):
       data = list(input())
       gra.append(data)
   print(dfs(gra))

点赞(0)
 

0.0分

0 人评分

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

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

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

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

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

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

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

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

评论列表 共有 0 条评论

暂无评论