Dijkstra 迪杰斯特拉算法的理解

在学习ros的movebase过程中,不可避免的的要学习dijkstra算法,对于这个算法总是看得懵懵懂懂的,下面给出自己的理解:

为什么很多人说迪杰斯特拉 就像剥洋葱一样一层一层的的扩展呢?

为什么代码看起来那么繁琐,没有搞懂意思?

我首先用直白的语言描述一下算法,这个算法本质上就是一个动作的重复执行:

前提:有一个起始点vs,有一个最短路径点库S,有一个未知最短路径点库U

其它的一些条件:只有与S库中的点直接相邻的U库中的点才有路径值,没有直接相连的就是隔得相对远的,一律用INF最大值表示。

好了,现在开始剥洋葱了!!!

动作:1、在U点库中找到值最小的点(U库中的点分为有值点和INF“远点”)

     2、现在更新U库中的点库,U库中所有与该点直接相邻的点获取各自路径值,相邻的点的路径值加上该点离起始点的路径值的和如果小于相邻点到起始点的路径值,那么替换掉,再把该点放入S库中。


这个动作执行完毕,然后一直重复这个动作从U点库中取最小点放入S库中,并更新U库中的路径权值。

慢慢的,S库中存上了 每个顶点到起始点的最小路径。

说了这么多也不知道这么讲清不清楚,本人也是看了半天算法的代码。然后按照代码的逻辑讲的惊讶









猜你喜欢

转载自blog.csdn.net/CWY_007/article/details/74922262