带权重 遍历所有节点最短路径_leetcode刷题(六):路径规划问题

本文详细探讨了路径规划问题,涉及图、松弛操作、Dijkstra算法、A*算法、蚁群算法和模拟退火算法。通过实例解释了这些算法的工作原理和关键步骤,帮助读者理解如何解决带权重的最短路径问题。
摘要由CSDN通过智能技术生成

670def2aaf10995b938426b1ccb411f7.png

由于最近接触了大量关于路径规划的算法,所以这一期我们来讨论下路径规划的问题!~!

首先,我要介绍下关于路径规划问题的一些基本概念。

在最短路径问题中,我们往往给定一个带权重的有向图,G=(V,E),以及权重函数w:E->R,改权重函数将每条边映射到实数值的权重上。

松弛操作

对于一条边(u,v)的松弛过程就是:首先测试一下对s到v的最短路径进行改善。

测试方法就是:将从结点s到结点u的最短路径加上结点u到结点v的权重值,并与当前结点s到结点v的最短路径进行比较。如果前者更小,就进行更新。

接下来我会介绍下几种主要的路径规划算法:

Dijkstra算法

Dijkstra算法使用了广度优先搜索解决赋权有向图或者无向图的单源最短路径问题,算法最终得到一个最短路径树。

Dijkstra算法采用的是一种贪心的策略:

他首先声明一个数组dis来保存源点s到各个结点的最短距离,以及一个保存已经找到最短的结点的集合T。

初始后,他先将s的路径权重设置为0,再将对于s能直接到达的u结点的权重设置为w,即dis[u]=w,同时把其他(s不能直接到的结点)路径长度设置为无穷大。此时T里面只包含u一个结点。

此时dis[]里面的值是否就是s结点能到达的最短路径呢?不着急,我们先看看新加入的结点是否可以到达其他节点,并且看看经由此节点到达其他结点的路径是否比从s源点直接到达更短,也就是一个松弛的过程。

然后,重复上述动作,直到T中包含了图的所有顶点。

此算法有也衍生出很多应用在不同场景下的算法,比如说用于稀疏图的Johnson算法。Johnson算法使用技术称之为重新赋予权重。

原理如下:

如果图中所有边的权重赋值为非负数,我们可以通过对每个结点对运行一次Dijkstra算法来找到所有结点对之间的最短路径。

如果图中包含有负数的权重的边,且不包含权重为负的环路,那么我们只要计算出一组新

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值