题解 | #迷宫问题#

迷宫问题

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

def find (hang,lie,maze,road):
    b = road
    b.append('(' + str(hang) + ',' + str(lie) + ')') #当前的位置加入路径
    if(hang == len(maze) - 1) & (lie == len(maze[0]) - 1): #如果到达出口,输出所经历的路径,但递归没有停止,但是题目只要求输出路径,
    之后递归还会运行,但不影响题目的完成了
        for i in b:
            print(i)
        return True
    if(lie- 1 >= 0): #如果能向左走
        if(c[hang][lie - 1] == '0'): #如果左边没被探索过
            c[hang][lie] = '1'  #标记已经探索过了,为了避免向回走,回到原来的位置的情况只有上下左右都探索过发现走不通回到原来的位置,不能自己回来
            find(hang,lie-1,maze,b)  #向左走
    if(lie + 1 <= len(maze[0]) - 1): #右
        if(c[hang][lie + 1] == '0'):
            c[hang][lie] = '1' 
            find(hang,lie+1,maze,b)
    if(hang - 1 >= 0): #上
        if(c[hang - 1][lie] == '0'):
            c[hang][lie] = '1' 
            find(hang - 1,lie,maze,b)
    if(hang + 1 <= len(maze) - 1 ): #下
        if(c[hang + 1][lie] == '0'):
            c[hang][lie] = '1' 
            find(hang + 1,lie,maze,b)
    b.remove(b[-1]) #上下左右全被探索过,没有找到出口,将这个位置从路径中抹去,路径只保存能到达最终位置的路径
while True:
    try:
        a = input()
        a = a.split() 
        row = int(a[0]) #迷宫的行数
        List = int(a[1]) #迷宫的列数
        maze = [] 
        for i in range(row):
            b = input()
            b = b.split()
            maze.append(b) #迷宫的矩阵
        road = []
        i = 1
        c = maze
        find(0,0,maze,road) #寻找出口
    except:
        break
华为机试题解(prod.by kedao) 文章被收录于专栏

华为实习机试题解

全部评论
妙啊,妙啊
点赞 回复 分享
发布于 2022-07-30 11:48

相关推荐

面试摇了我吧:啊哈哈面试提前五个小时发,点击不能参加就是放弃
点赞 评论 收藏
分享
字节 飞书绩效团队 (n+2) * 15 + 1k * 12 + 1w
点赞 评论 收藏
分享
1 1 评论
分享
牛客网
牛客企业服务