迷宫的最短路径——基于DFS算法

文章讲述了作者在学习过程中如何用深度优先搜索(DFS)替代动态规划求解一个网格上的最小路径问题,给出了详细的函数实现和示例,最终输出结果为13。
摘要由CSDN通过智能技术生成

在学习hello算法的时候遇到这样一道题

 原作者给出的是基于动态规划的算法,但是貌似没有给出回溯的算法,于是我尝试着使用了DFS来给出问题的答案,代码如下。

def backtrack(i:int,j:int,grid:list[list[int]],
path:list[int],minpath:list[int],n:int,m:int):
    if i==n and j==m:
        if path[0]<minpath[0]:
            minpath[0]=path[0]#当结束的时候path小于minpath,则将其替换。
        return
#这里我先检索了向下,然后再向右。
    if i+1<=n:
        path[0]+=grid[i+1][j]
        backtrack(i+1,j,grid,path,minpath,n,m)
        path[0]-=grid[i+1][j]
    if j+1<=m:
        path[0]+=grid[i][j+1]
        backtrack(i,j+1,grid,path,minpath,n,m)
        path[0]-=grid[i][j+1]
def min_path(grid:list[list[int]]):->int
    n=len(grid)-1
    m=len(grid[0])-1
#这里path不能设置为0.因为起始格子也有对应的代价。
    path=[grid[0][0]]
    minpath=[100000]#一个足够大的数字即可。
    backtrack(0,0,grid,path,minpath,n,m)
    return minpath[0]
grid=[[1,3,1,5],
      [2,2,4,2],
      [5,3,2,1],
      [4,3,5,2]]
min_path(grid)

最终输出结果为13.

  • 9
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
对于解决迷宫最短路径问题,可以使用图论中的最短路径算法,其中最常用的是Dijkstra算法和A*算法。在MATLAB中,可以使用以下步骤实现迷宫最短路径算法: 1. 创建迷宫地图: 首先,你需要创建一个表示迷宫的地图。可以使用矩阵来表示,其中0表示可通行的路径,1表示墙壁或障碍物。例如,一个3x3的迷宫可以表示为: ```matlab maze = [0 1 0; 0 0 1; 1 0 0]; ``` 2. 构建图数据结构: 将迷宫地图转换为图数据结构,以便进行最短路径计算。你可以使用MATLAB的graph函数来创建一个图对象,并设置每个节点之间的连接关系。将可通行的路径作为节点,通过边连接相邻的节点。例如: ```matlab G = graph; [rows, cols] = size(maze); for i = 1:rows for j = 1:cols if maze(i, j) == 0 node = (i - 1) * cols + j; neighbors = []; if i > 1 && maze(i-1, j) == 0 neighbors = [neighbors, node - cols]; end if i < rows && maze(i+1, j) == 0 neighbors = [neighbors, node + cols]; end if j > 1 && maze(i, j-1) == 0 neighbors = [neighbors, node - 1]; end if j < cols && maze(i, j+1) == 0 neighbors = [neighbors, node + 1]; end G = addedge(G, repmat(node, size(neighbors)), neighbors); end end end ``` 3. 计算最短路径: 使用Dijkstra算法或A*算法计算从起点到终点的最短路径。可以使用MATLAB的shortestpath函数来实现,它接受图对象和起点、终点作为输入,并返回最短路径。例如: ```matlab startNode = 1; % 起点节点 endNode = rows * cols; % 终点节点 path = shortestpath(G, startNode, endNode); ``` 这样,你就可以在MATLAB中实现迷宫最短路径算法了。记得适当处理特殊情况,比如无法达到终点或起点无效等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值