最短路径求解算法

最短路径求解算法

路径规划算法是指在一个空间内,寻找点A到点B所经过的路径。本文主要围绕两类路径规划算法问题进行讨论。

  1. 求一个带权网格中两点之间的最短路径。
  2. 求一个不带权网格中两点之间路径,网格中包含障碍物但障碍物可以破坏k个( 0 ≤ k )?

1. 求一个带权网格中两点之间的最短路径

这属于动态规划(Dynamic Programming,DP)问题,求解思路如下。针对下表,为了求解(0,0)到(3,4)的最短路径,将问题进行划分,如果确定了点(0,0)到(2,3)、(2,4)和(3,4)之间的最短路径a1,a2,a3,则10+min{a1,a2,a3}就为最终的最短路径(0,0)到(3,4)之间的最短路径,这样将大的问题逐渐缩小可使最终问题求解,求解最短路径的过程就是不但求解点(0,0)到中间节点最短路径的过程。
在这里插入图片描述
练习题:: https://blog.csdn.net/o83290102o5/article/details/104224603.
3. 求一个不带权网格中两点之间路径,网格中包含障碍物但障碍物可以破坏k个?
主要用到了广度优先遍历(Breadth First Search,BFS)算法,深度优先遍历(Depth First Search,DFS)和广度优先遍历都能够求得一个点到另外一个点的最短路径,但是思路略有不同。
使用深度优先遍历算法求解最短路径是需要穷举所有路径,然后比较所有路径的代价最终确定最短路径,中间根据最短路径同一个点不会重复访问进行剪枝。
广度优先遍历求解虽然也属于暴力破解,但是在求解过程中存在剪枝操作更多主要体现在:
1.最短路径的同一个点不会重复访问。
2.所有路径都一起找,所有路径每一次都一起向前移动一个单位,最先到达定点的一定是最短路径,其它路径不同在进行查找,这也是BFS在速度上由于DFS的主要原因。
练习: https://leetcode-cn.com/problems/shortest-path-in-a-grid-with-obstacles-elimination/submissions/.

总结

BFS可以看成剪枝后的动态规划算法,第一个问题其实也可以使用BFS进行解决。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值