def bfs(grid, begin, end):     '''     bfs方法能求得最短路径     :param grid:      :param begin:      :param end:      :return:      '''     n= len(grid)     seen = []     dx = [1, 0, -1, 0]  # 四个方位     dy = [0, 1, 0, -1]     level = []     level.append(begin)     seen.append(begin)     step = 0     while level:         queue = []         step += 1         for q in level:             for i in range(4):                 nx, ny = q[0] + dx[i], q[1] + dy[i]                 if 0 <= nx < n and 0 <= ny < n and grid[nx][ny] != '#':                     if [nx, ny ] in end:                         return step                     if [nx, ny] not in queue and [nx, ny] not in seen:                         queue.append([nx, ny])                         seen.append([nx, ny])         level = queue         print(level)     return -1 if __name__ == '__main__':     n = int(input())     grid = [['' for _ in range(n)] for _ in range(n)]     g3 = []     begin = []     end = []     # 复制9块迷宫  从中间那块迷宫的起点'S'出发,直到到达任意9块迷宫中的'E'     for i in range(n):         s = input()         g3.append(s*3)         grid[i] = list(s)         if 'S' in s:             begin.append(i+n)             begin.append(s.index('S')+n)         if 'E' in s:             for x in range(0,2*n+1,n):                 for y in range(0,2*n+1,n):                     end.append([i + x,s.index('E') + y])     maze = []     for i in range(3):         for j in range(len(g3)):             maze.append(g3[j])     print(bfs(maze, begin, end)) 考试完后想到的一种思路: 1、将复制9块迷宫图组装在一起 2、从中间迷宫图的起点到达任意迷宫图的终点即为到达终点,步进方式用bfs
点赞 评论

相关推荐

牛客网
牛客企业服务