赞
踩
今天为大家分享的算法是为解决最短路径算法的Dijkstra算法(简称D算法),这是一个解决从点到点之间最短路径的问题,看下面这张图:
这里,我们想要得出节点a(节点1)到节点b(节点5)的最短路径,就是怎么走可以使得权重值的和最小,每一条边都有一个权重。
今天我们介绍的D算法就是解决这类问题的,这是一种贪心算法,每次只取权重和最小的点,通过不断加入节点,来更新源节点a到各个节点的最短路径,直到所有节点遍历完。
算法步骤:
1、定义,遍历过的节点集合为S,集合U为其余节点(即未遍历)。初始时,S只包含源点v,即S={v},v的距离为0。U包含除v外的其他顶点,即:U={其余顶点}。若v与U中顶点u有边,则正常有权值,若u不是v的出边邻接点,则权值为∞。
注:这里集合S、U,是为了判断哪些节点已经遍历过,如果U为空了,就不继续执行。
2、从集合U中选取一个距离v最小的顶点k,把k加入到S中。
3、以k为新考虑的中间点,修改v到U中各顶点的距离;若从源点v到顶点w的距离(经过顶点k)比原来距离(不经过顶点k)短,则修改v到w的距离值。
例子:
4、重复步骤2、3直到所有顶点都包含在S中。
上面就是D算法的处理步骤,可能大家第一次看和我一样很迷茫,不要紧,我们结合上面这个图,
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。