题解 | #迷宫问题#

迷宫问题

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

import sys

n,m = map(int,input().split())    #行数和列数
MAP = [[-1]*m for _ in range(n)]  #定义地图
for i in range(n):     
    MAP[i] = list(map(int,input().split()))  #注意需要把地图上的值变成整数
lst = [(0,0)]  #起点
while lst:  #只要lst有值就一直循环
    if lst[-1] == (n-1,m-1):   #如果已经到达终点,直接跳出循环,输出结果。
        lst = ['(%d,%d)'%(x) for x in lst]
		#结果中间注意去掉空格,如下写法亦可。
		#lst = ['{0[0],0[1]}'.format(x) for x in lst]  中括号中第一个0是传入的参数x,如果还有其他参数,类推。
        print(*(lst),sep='\n')
        break
    i,j = lst[-1]  #始终选择最后走到的点
    MAP[i][j] = 'walked'  #将该点标记为已经走过(任何非0值)。
    if i-1 >= 0 and MAP[i-1][j] == 0:  #如果往下能走,注意如果走了这步则跳出本轮循环
        lst.append((i-1,j))
        continue
    elif i+1 < n and MAP[i+1][j] == 0: #如果往上能走,注意如果走了这步则跳出本轮循环
        lst.append((i+1,j))
        continue
    elif j+1 < m and MAP[i][j+1] == 0: #如果往右能走,注意如果走了这步则跳出本轮循环
        lst.append((i,j+1))
        continue
    elif j-1 >= 0 and MAP[i][j-1] == 0: #如果往左能走,注意如果走了这步则跳出本轮循环
        lst.append((i,j-1))    
        continue        
    else:
        lst.pop()  #如果各个方向都走不了,则清除上一个记录的路径点,同时由于该点已经标记为非0值walked,则后续不会再尝试走。如果本轮还是过后还是无处可走,会继续回退。
else:
    print('MAP WRONG')

全部评论

相关推荐

03-31 17:40
已编辑
门头沟学院 算法工程师
程序员牛肉:小牛肉来也! 也不要焦虑啦,你第一志愿还没有结束,只是回到人才库(泡大池子等待各个部门挑选)而已。仅仅代表你不符合这个组的用人标准,并不能够说明你在本次暑期实习中没机会加入美团了。 还是平复好心态,不断的复盘,等待下一次面试就好了。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务