解题思路:

注意事项:
用DFS时间会超限,主要是回溯部分时间复杂度太高,BFS更适合本题多路径的思路
参考代码:

def bfs():
    global map_, visited, dxdy, n, m, go, stack

    while stack:
        temp = stack.pop(0)
        for i, j, k in dxdy:
            if map_[temp[0] + i][temp[1] + j] == 0 and \
                    visited[temp[0] + i][temp[1] + j] is False:

                stack.append((temp[0] + i, temp[1] + j, temp[2] + 1))
                visited[temp[0] + i][temp[1] + j] = True
                go[temp[0] + i][temp[1] + j] = go[temp[0]][temp[1]] + k
                if temp[0] + i == n and temp[1] + j == m:
                    return go[-2][-2]


n, m = map(int, input().split())
map_ = [[1 for _ in range(m + 2)]]
visited = [[False for _ in range(m + 2)] for _ in range(n + 2)]
visited[1][1], x, y = True, 1, 1
dxdy = [[1, 0, 'D'], [0, -1, 'L'], [0, 1, 'R'], [-1, 0, 'U']]
go = [['' for _ in range(m + 2)] for _ in range(n + 2)]
for i in range(n):
    map_.append([1] + list(map(int, input())) + [1])
map_.append([1 for _ in range(m + 2)])
stack = [(x, y, 0)]
aa = bfs()
print(len(aa))
print(aa, sep='')


点赞(0)
 

0.0分

0 人评分

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

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

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

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

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

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

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

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

评论列表 共有 0 条评论

暂无评论