HJ43 广搜解法 题解 | #迷宫问题#

迷宫问题

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

#太妙了,从Python热门解学到的广搜来解决这道题
#窍门:看到“唯一解”,直接用广搜,这种情况广搜方便的多
#编程技巧:使用递归函数的参数存储自己需要的内容


#行走函数
def moveforward(x,y,route=[(0,0)]):#x,y为当前位置行列数,route为经过的路径
    #往四边尝试移动
    if x+1<=n-1 and maze[x+1][y]==0 and (x+1,y) not in route:#向右走
        moveforward(x+1,y,route+[(x+1,y)])#以x+1,y为当前位置继续走
    if x-1>=0 and maze[x-1][y]==0 and (x-1,y) not in route:#向左走
        moveforward(x-1,y,route+[(x-1,y)])
    if y+1<=m-1 and maze[x][y+1]==0 and (x,y+1) not in route:#向下走
        moveforward(x,y+1,route+[(x,y+1)])
    if y-1>=0 and maze[x][y-1]==0 and (x,y-1) not in route:#向上走
        moveforward(x,y-1,route+[(x,y-1)])
    #判断是否到达终点
    if x==n-1 and y==m-1:
        #输出
        for i in route:
            print("({},{})".format(i[0],i[1]))


#输入
n,m=map(int,input().split())
maze=[]
for i in range(n):
    maze.append(list(map(int,input().split())))
moveforward(0,0)

注意:

这个解法不是我的原创,是参考了Python热门题解的思路写的。这个解法要比我自己的深搜写法代码少得多,推荐学习这个。

参考题解:

https://blog.nowcoder.net/n/b20decc82fe242668094f0636a59ded5?f=comment

#华为##华为机试##华为od##华为od机试#
华为HJ103所有解法 文章被收录于专栏

这是我准备华为od面试的专属专栏,我会把自己的解法更新在里面,我会尽量写清楚自己的思路以及多写关键注释,希望对阅读的人有帮助~~~

全部评论

相关推荐

不愿透露姓名的神秘牛友
昨天 15:27
点赞 评论 收藏
分享
04-18 15:58
已编辑
门头沟学院 设计
kaoyu:这一看就不是计算机的,怎么还有个排斥洗碗?
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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