题解 | #迷宫问题#
迷宫问题
https://www.nowcoder.com/practice/cf24906056f4488c9ddb132f317e03bc
#将输入的内容转化为二维数组迷宫 M,N = map(int,input().split()) #在输入的迷宫内容的四周加上一层墙,这样不用考虑走到边界有的方向不能走的问题,此时,起点的坐标变为(1,1),终点坐标为(M,N) maze = [] for i in range(M+2): if i == 0 or i == M+1: line = [1 for _ in range(N+2)] maze.append(line) else: lin = ('1' + ' ' + input() + ' ' + '1').split() line = [int(n) for n in lin] maze.append(line) #定义前进方向 dirs = { lambda x,y:(x,y+1),#表示向右走 lambda x,y:(x-1,y),#表示向上走 lambda x,y:(x,y-1),#向左走 lambda x,y:(x+1,y),#向下走 } def maze_rout(x0,y0,x1,y1):#x0,y0,x1,y1分别表示起点和终点的下标 stack = []#栈用来保存走过的路 stack.append((x0,y0)) while stack:#当栈空时表示没有路走到终点 currnode = stack[-1] if currnode[0] == x1 and currnode[1] == y1: for p in stack: p1 = (p[0]-1,p[1]-1) print('('+str(p1[0])+','+str(p1[1])+')') break for dir in dirs: nextnode = dir(currnode[0],currnode[1]) if maze[nextnode[0]][nextnode[1]] == 0: stack.append(nextnode) maze[nextnode[0]][nextnode[1]] = 2 break else:#其它三个方向都没有路时往回退 stack.pop() maze_rout(1,1,M,N)