题解 | #迷宫问题#

迷宫问题

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')

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务