题解 | #迷宫问题#

迷宫问题

http://www.nowcoder.com/practice/cf24906056f4488c9ddb132f317e03bc

dfs的方法,此题相当于一个四叉树,每次可以选择走上下左右任何方向,只要不越界。如果发现某条路径不通,需要注意把该不通路径中所有的轨迹删掉。

a, b = map(int, str(input()).split())
route_c = []#存放走过的轨迹
maze = []#接收输入数组
path = [[0 for i in range(b)] for i in range(a)]#记录哪个轨迹点曾经走过,确保不走回头路
#path = np.zeros([a, b])
#print(path)
for j in range(a):
    l = [i for i in list(map(int, str(input()).split()))]
    maze.append(l)


def find_r(m, n, route_c):
    #nonlocal route_c
    #route_c_l = route_c
    if maze[m][n] == 1:
        return
    else:
        route_c.append([m, n])
        path[m][n] = 1
    if m == a-1 and n == b-1:
        for ele in route_c:
            print('(' + str(ele[0])+','+str(ele[1])+')')
        return
    l_rc = len(route_c)
    #back_r = -1 if l_rc<2 else route_c[-2][0]
    if m < a-1 and path[m+1][n] == 0 :
        find_r(m+1, n, route_c)
        #l_rc = 2
        route_c = route_c[:l_rc]#能够走到这一步,说明该路径不通,则把轨迹点都删掉。
    l_rc = len(route_c)
    if n < b-1 and path[m][n+1] == 0 :
        find_r(m, n+1, route_c)
        route_c = route_c[:l_rc]
    l_rc = len(route_c)
    if m > 0 and path[m-1][n] == 0:
        find_r(m-1, n, route_c)
        route_c = route_c[:l_rc]
    l_rc = len(route_c)
    if n > 0 and path[m][n-1] == 0:
        find_r(m, n-1, route_c)
        route_c = route_c[:l_rc]
find_r(0, 0, route_c)
全部评论

相关推荐

不愿透露姓名的神秘牛友
06-19 19:05
点赞 评论 收藏
分享
门口唉提是地铁杀:之前b站被一个游戏demo深深的吸引了。看up主页发现是个初创公司,而且还在招人,也是一天60。二面的时候要我做一个登录验证和传输文件两个微服务,做完要我推到github仓库,还要我加上jaeger和一堆运维工具做性能测试并且面试的时候投屏演示。我傻乎乎的做完以后人家跟我说一句现在暂时不招人,1分钱没拿到全是白干
点赞 评论 收藏
分享
05-01 22:41
中南大学 Java
点赞 评论 收藏
分享
评论
2
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务