题解 | #迷宫问题#
迷宫问题
https://www.nowcoder.com/practice/cf24906056f4488c9ddb132f317e03bc
N, M = map(int, input().split())
maze = [] # 构造N行M列的迷宫
for _ in range(N):
row = list(map(int, input().split()))
maze.append(row)
# 定义下一步的位置
dirs = [
lambda x,y: (x+1,y), # 向上
lambda x,y: (x-1,y), # 向下
lambda x,y: (x,y-1), # 向左
lambda x,y: (x,y+1), # 向右
]
def maze_path(x1,y1,x2,y2):
stack = []
stack.append((x1, y1))
while(len(stack)>0):
curNode = stack[-1] # 当前的节点
if curNode[0] == x2 and curNode[1] == y2:
# 走到终点了
for p in stack:
print('(%s,%s)' % (p[0],p[1]))
return True
# x,y 四个方向 x-1,y; x+1,y; x,y-1; x,y+1
for dir in dirs:
nextNode = dir(curNode[0], curNode[1])
# 判断下一个点是否超出范围
if nextNode[0] not in range(N) or nextNode[1] not in range(M):
continue
# 如果下一个节点能走
if maze[nextNode[0]][nextNode[1]] == 0:
stack.append(nextNode)
maze[nextNode[0]][nextNode[1]] = 2 # 2表示为已经走过
break
else:
maze[curNode[0]][curNode[1]] = 2
stack.pop()
else:
print("没有路")
return False
maze_path(0,0,N-1,M-1)
maze = [] # 构造N行M列的迷宫
for _ in range(N):
row = list(map(int, input().split()))
maze.append(row)
# 定义下一步的位置
dirs = [
lambda x,y: (x+1,y), # 向上
lambda x,y: (x-1,y), # 向下
lambda x,y: (x,y-1), # 向左
lambda x,y: (x,y+1), # 向右
]
def maze_path(x1,y1,x2,y2):
stack = []
stack.append((x1, y1))
while(len(stack)>0):
curNode = stack[-1] # 当前的节点
if curNode[0] == x2 and curNode[1] == y2:
# 走到终点了
for p in stack:
print('(%s,%s)' % (p[0],p[1]))
return True
# x,y 四个方向 x-1,y; x+1,y; x,y-1; x,y+1
for dir in dirs:
nextNode = dir(curNode[0], curNode[1])
# 判断下一个点是否超出范围
if nextNode[0] not in range(N) or nextNode[1] not in range(M):
continue
# 如果下一个节点能走
if maze[nextNode[0]][nextNode[1]] == 0:
stack.append(nextNode)
maze[nextNode[0]][nextNode[1]] = 2 # 2表示为已经走过
break
else:
maze[curNode[0]][curNode[1]] = 2
stack.pop()
else:
print("没有路")
return False
maze_path(0,0,N-1,M-1)

