华为机考 迷宫问题 DFS python

注意边界上下左右,在起点时是不能往上和左走的
有个地方我暂时理解不了,有了解的大佬还请不吝赐教
我在判断边界的时候,如果这么写,编译总是报错超出索引

#如果往上走不了,能不能往下走,能走则写入坐标
    elif  maze[r+1][c] == 0 and r+1 < n:

一直找不到原因,按理来说and应该是并行判断,用if的时候没问题,用elif就出问题了
改成这样就没问题了

#如果往上走不了,能不能往下走,能走则写入坐标
    elif r+1 < n and maze[r+1][c] == 0 :
"""
5 5
0 1 0 0 0
0 1 1 1 0
0 0 0 0 0
0 1 1 1 0
0 0 0 1 0

"""
n,m = map(int,input().split())   #n行m列
maze =[]
for i in range(n):   #每行输入 存储迷宫
    maze.append(list(map(int,input().split())))


#坐标存储
coords = []
start = (0,0)
end = (n-1,m-1)    #边界/结束 ,设置起始点
coords = [start]
while coords:   #当坐标不为空时
    #当前节点
    now = coords[-1]   #最后一个坐标
    r,c = now          #解包,(1,2)-->r=1,c=2
    maze[r][c] = 2     #标记走过的坐标,用任意数将0覆盖,
    # 往上能不能走
    if now == end:
        for i in coords:
            print(f'({i[0]},{i[1]})')
        break
    if maze[r-1][c] == 0 and r!=0: #往上可以走(行不为0的时候),则写入坐标
        coords.append((r-1,c))
        continue
    #如果往上走不了,能不能往下走,能走则写入坐标
    elif r+1 < n and maze[r+1][c] == 0 :
        coords.append((r+1,c))
        continue
    #上下走不了,左边能不能走
    elif maze[r][c-1] == 0 and c!=0 :
        coords.append((r,c-1))
        continue
    #上下左都走不了,往右
    elif c+1 < m and maze[r][c+1] == 0 :
        coords.append((r,c+1))
        continue
    else:    #上下左右都不能走了(来时的路已经用其他数字覆盖0了),将最后一项去掉
        coords.pop()  #走到死胡同的时候,由于来路都被标记过了,所以会一直移除来时的坐标直到最近的岔路,然后走没走过的那一条
else:
    print("无路可走")

思路来源视频添加链接描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
华为机考 Python 是指华为公司在招聘过程中,通过使用机器进行考核Python编程能力。这种形式的考试采用了自动化的方式,可以帮助华为更高效地筛选出具备优秀Python编程能力的应聘者。 华为机考 Python 主要围绕Python编程语言进行,通过将考生放在一台电脑前,让其完成一系列的编程任务。这些任务可能包括基本的语法和控制语句的理解和运用,常见的数据结构和算法的实现,以及利用Python进行文件操作,网络编程等方面的能力。 相较于传统的面试方式,华为机考 Python 的好处在于它可以快速、客观地评估应聘者的Python编程能力。通过使用机器评分系统,可以对每个考生的答题情况进行统一的评估。这样一方面可以提高效率,节省人力成本,另一方面也可以避免因个人主观因素对考试结果的影响。 对于应聘者而言,参加华为机考 Python 不仅是一种展示自己编程能力的机会,也是锻炼自己代码编写和调试能力的机会。因此,在参加机考前,应聘者应该对Python编程语言进行充分的学习和准备,熟悉Python的语法规则、常用的数据结构和算法,并且掌握一定的调试技巧和如何解决常见编程问题的能力。 总之,华为机考 Python华为公司在招聘过程中采用的一种自动化考核方式,可以帮助公司更高效地筛选出具备优秀Python编程能力的应聘者。对于应聘者而言,参加机考前应该做好充分准备,以展示自己的编程实力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值