题解 | #迷宫问题#
迷宫问题
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')


