【学习笔记】离散数学中的最短路径算法--Dijkstra算法

  首先说说Dijkstra算法的实现步骤,之后会慢慢解释。

1)初始化符号。用0作为结点u的标号,其余结点临时记为\infty,即L(u)=0,L(v_{i})=\infty,i=1,2...n。S={u}。

 2)修改与结点u相邻的点的标记值,使得L(v_{i})=L(u)+W(u,v_{i})。其中W是u到v_{i}的边的权重。

3)将具有最小标记值的点记为t,并把结点t添加到集合S中,即S=S\cup{t}。

4)修改和结点t相邻且不在集合S中的结点的标记值,L(v_{i})=min(L(v_{i}),L(t)+W(t,v_{i}))。

5)重复3)和4)直至结点v被添加到集合S中。

简单解释一下各个步骤的意思。

首先是第一步,初始化,仅把初始点记为0,其余各点记为无穷大,意思是起点到自己的距离是0,然后到其余个点的距离暂时未知。

然后修改和u相邻的点的标记值,使之等于u到起点的长度加上相邻边权重(也可以视为长度),经过这样的扩展后,可以说结点u往前移动了一步,必然会多出几个点。

第三步,将具有最小标记值的点添加到点集S中,以后的路都会从S中走。这时候对于最小标记值结点,使之做类似步骤2的移动,找出不在S集合中的下一个t,之后不断重复这个步骤,直到终点被添加到集合S中,由于t一直都是最小的标记值,所以最短路径就是由t移动而来的路径。

 

你可能感兴趣的:(算法,图论,数据结构)