利用分支限界法求解单源最短路(Dijkstra)问题

本文介绍了如何运用分支限界法解决单源最短路问题。通过建立优先队列,遵循Best first原则扩展节点,舍弃非最优分支,逐步找到所有点的最短路径。在每次扩展时,更新目标节点的下界并根据消耗值决定是否继续探索。循环此过程直至队列为空,最终得到图中每个节点的最短路径。
摘要由CSDN通过智能技术生成
分支限界法定义:采用Best fist search算法,并使用剪枝函数的算法称为分支界限法。

分支限界法解释:按Best first的原则,有选择的在其child中进行扩展,从而舍弃不含有最优解的分支,不断重复这一过程,直到找到答案或者判定无解。

分支界限法常常用到优先队列来选择最佳扩展节点,有时也会用到普通队列,以先进先出为原则来进行筛选。

单源最短路问题定义:给定有向图和起点,寻找到达所有点的最短路径。

单源最短路的分支限界法概述:首先把节点加入优先队列,以到当前节点的最短路为下界,之后不断地从队列中取出最优扩展点,观察其可抵达的所有目标节点。

若当前消耗大于等于全局上界及目标节点消耗,则放弃该节点。所示代码因没有规定终点,即每个点都要输出最小路径,则不检查这一步。

若当前路径消耗+两节点间路径消耗<目标节点目前最小消耗(即更新后下界<目标当前下界)
则用不等式左边的和替换掉右边的值,并将该目标节点加入优先队列。

循环这个过程直到队列为空,即可获得图中所有节点的最短路。

代码如下:

#include <queue>
#include <vector>

const<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值