栈-迷宫问题
给一个二维列表,表示迷宫(0表示通道,1表示围墙)。给出一条走出迷宫的路径
栈-深度优先搜索,回溯法思路:使用栈存储当前路径,从一个节点出发,任意找一个能走的点,当找到不能找的点时,退回上一个点寻找是否有其他方向的点(出栈)。
# 深度优先搜索 又称回溯法 maze = [ [1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [1, 0, 0, 1, 0, 0, 0, 1, 0, 1], [1, 0, 0, 1, 0, 0, 0, 1, 0, 1], [1, 0, 0, 0, 0, 1, 1, 0, 0, 1], [1, 0, 1, 1, 1, 0, 0, 0, 0, 1], [1, 0, 0, 0, 1, 0, 0, 0, 0, 1], [1, 0, 1, 0, 0, 0, 1, 0, 0, 1], [1, 0, 1, 1, 1, 0, 1, 1, 0, 1], [1, 1, 0, 0, 0, 0, 0, 0, 0, 1], [1, 1, 1, 1, 1, 1, 1, 1, 1, 1] ] 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): # 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(p) # 打印路径 return True for dir in dirs: # x,y四个方向 nextNode = dir(curNode[0], curNode[1]) # 二维元组 if maze[nextNode[0]][nextNode[1]] == 0: # 如果下一个节点能走 stack.append(nextNode) # 则将下一个节点入栈 maze[nextNode[0]][nextNode[1]] = 2 # 否则标记为2,2表示已经走过 break else: maze[nextNode[0]][nextNode[1]] = 2 stack.pop() # 退回 else: print('没有路') return False maze_path(1,1,8,8)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」