由于题目表明只有一条最优路径,则利用栈的思想,后进先出,这种方式不一定是最优路径
如果题目要求存在多个路径求最优,此法不通
# 定义一个数组 用于移动方向
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(n,m,maze):
# 定义栈
stack = []
# 保存初始值进栈
stack.append((0,0))
while len(stack) > 0 :
# 标记当前节点
curNode = stack[-1]
# 判断当前节点是否为终点
if curNode[0] == n-1 and curNode[1] == m-1 :
# 输出栈里的元组,就是行走路径
for i in stack:
print(f'({i[0]},{i[1]})')
return True
for dir in dirs :
# 计算出下一个节点的坐标
nextNode = dir(curNode[0],curNode[1])
# 避免数组越界,给定范围
if 0 <= nextNode[0] <= n-1 and 0 <= nextNode[1] <= m-1 :
# 如果下一个节点能通行的坐标位置是 0
if maze[nextNode[0]][nextNode[1]] == 0 :
# 添加到栈
stack.append(nextNode)
# 并标记已走过的路
maze[nextNode[0]][nextNode[1]] = 2
break
else : # 如果不是 0 则出栈
# 避免数组越界,给定范围
if 0 <= nextNode[0] <= n-1 and 0 <= nextNode[1] <= m-1 :
maze[nextNode[0]][nextNode[1]] = 2
stack.pop()
else:
return False
n,m = map(int,input().strip().split())
maze = [list(map(int,input().strip().split())) for _ in range(n)]
maze_path(n,m,maze)



京公网安备 11010502036488号