Python实现递归法解决迷宫问题的示例代码

  

  

  

迷宫可用方阵(m, n)表示,0表示可通过,1表示不能通过。若要求左上角(0,0)进入,设计算法寻求一条能从右下角(m - 1, n - 1)出去的路径。

  

示例图:

  

 Python实现递归法解决迷宫问题的示例代码”> <br/>
  </p>
  <p> <强>此示例图基本参数为:</强> </p>
  <ul>
  <李> m:对应李</>
  <李> x轴n:对y轴应李</>
  <李>绿色线代表期望输出的路径李</>
  </ul>
  <p> </p>
  <ol>
  <李>标记当前所在位置李</>
  <李>如果此时所在位置为终点,说明可以到达终点,退出递归;李</>
  </ol>
  <p>否则,则存在4种可能的移动方向即上,下,左,右,遍历这4个方向,如果这4个方向存在相邻值为0的点,则将当前点坐标标记为该相邻值为0的点坐标,进入递归</p>
  <p> <强>直观理解为:</强> <br/>
  </p>
  <p> <img src=   def马克(迷宫,pos):   ”“”   标记函数,用来标记历史走过的位置   :param迷宫:一个m * n大小的二维矩阵迷宫   :param pos:当前需要标记的位置坐标pos=(x, y), x=pos [0], y=pos [1]   ”“”   pos迷宫[pos[0]][[1]]=2 #将走过的位置标记为2      

移动函数

        def移动(迷宫,pos):   ”“”   移动函数,用来测试当前位置是否可继续移动,移动条件为当前位置为0   :param迷宫:一个m * n大小的二维矩阵迷宫   :param pos:当前需要标记的位置坐标pos=(x, y), x=pos [0], y=pos [1]   返回:bool类型   ”“”   返回迷宫[pos [0]] [pos [1]]==0      

核心函数——路径查找函数

        def find_path(迷宫,开始,结束):   ”“”   路径查找函数   :param迷宫:一个m * n大小的二维矩阵迷宫   :param开始:起始点位置坐标,开始=(1,1)   :param结束:终点坐标,最后=(m, n)   返回:bool类型   ”“”   马克(迷宫,开始)#将起始位置标记   如果开始==结束:#路径查找(递归)终止条件为到达终点   move_path.append(开始)   还真      #未到达终点时,存在4种可能的移动方向,即上(1,0)、下(1,0),左(0,1),右(0,1)   move_direction=[   (1,0)、(1,0)、(0,1),(0,1)   ]   方向=[“↑”、“↓”“←”“→”)   因为我在范围(4):#遍历4种可能的方向   next_start=(开始[0]+ move_direction[我][0],[1]+ move_direction开始[我][1])#下一个可能的起始点坐标   如果移动(迷宫,next_start): #找出存在0即可移动的下一个起始点坐标,进入递归   如果find_path(迷宫,next_start,结束):   #这里之所以仍然添加起始点坐标是因为当查询到下一个位置就是终点或者可到达终点时记录此时位置   move_path.append(开始)   path_direction.append(方向[我])#记录路径方向   还真   返回False #遍历递归了4种可能方向后仍不能到达终点则说明无法走出迷宫   之前      

算法到这里基本上已经算完成,整体上不算太复杂

  

  

生成带有移动路径数据的迷宫矩阵

        def path_maze(迷宫,directions_map):   ”“”   生成带有移动路径的迷宫矩阵   :param迷宫:一个m * n大小的二维矩阵迷宫   :param directions_map:一个记录移动方向坐标的字典,有↑、↓←,→4个元素   返回:path_maze   ”“”   n m=len(迷宫[0]),len(迷宫)   m - 1 x的范围(1):   y的范围(1,n - 1):   迷宫迷宫[x] [y]=[x] [y]如果迷宫[x] [y] !其他=2 0 #将标记的2还原为0      x的范围(米):   我的范围(1、2 * n - 1、2):   迷宫[x]。插入(我”、“)#重初始化迷宫,在每两个元素间插入占位符“3个空格      x的范围(1、2 * m - 1、2):   迷宫。插入(x, [' ', ' ') * (n - 1) +["]) #插入两种空格占位符' '和' '      在directions_map方向:   在directions_map directions_position(方向):   i, j=directions_position   我=2 *   j=2 *   如果方向==啊?   迷宫(i - 1] [j]=啊?   如果方向==啊?   迷宫(i + 1) [j]=啊?   如果方向==啊?   迷宫[我][j]="←"   如果方向==啊?   迷宫[我][j + 1]=啊?   返回迷宫

Python实现递归法解决迷宫问题的示例代码