基于网格的迷宫最短路径搜索算法

问题定义

给定一个大小为 n x m 的网格,每个单元格表示迷宫中的一个位置,其中:

  • 1 表示空地,可以通行。
  • 0 表示障碍物,不可通行。

任务是找到从指定起点到指定终点的最短路径。路径由一系列移动组成,每个移动可以是向上(U)、向下(D)、向左(L)或向右(R),每次移动到相邻的单元格。路径必须满足以下约束:

  • 路径不能穿过障碍物。
  • 路径不能超出网格边界。
  • 起点和终点保证是空地。

算法描述

解决这个问题可以使用广度优先搜索(BFS)算法。BFS 算法从起点开始,逐层探索可到达的单元格,直到找到终点。

  1. 初始化: 将起点加入队列,并将其距离标记为 0。
  2. 循环: 当队列不为空时,执行以下步骤:
    • 从队列中取出一个单元格。
    • 如果该单元格是终点,则搜索完成,返回路径。
    • 否则,遍历该单元格的四个相邻单元格(上、下、左、右)。
    • 对于每个相邻单元格,如果它是空地且未被访问过,则将其加入队列,并将其距离设置为当前单元格距离 + 1。
  3. 路径构建: 从终点开始,沿着距离递减的方向回溯到起点,即可得到最短路径。

算法分析

BFS 算法可以保证找到最短路径,因为它是按照距离递增的顺序探索单元格的。算法的时间复杂度为 O(n x m),因为每个单元格最多被访问一次。空间复杂度也为 O(n x m),主要用于存储队列和访问标记。

cpp 文件大小:5.84KB