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