最短路径算法

来源:互联网 发布:remark软件 编辑:程序博客网 时间:2024/06/10 21:19

以前上课的时候有讲这些算法,但是自己没有深究,就觉得哦 反正我不会用到。然后在做杭电2066的时候卡住了,看讨论用的最多的就是dijkstra算法(单源最短路径算法)。

所以我只好在网上疯狂搜索别人的博客来了解这个算法。下面就贴三个我觉得我能初步理解皮毛的博客。

1。这个是我觉得把理论尽量简单化的描述出来,讲得很详细。damenhanter的专栏:http://blog.csdn.net/damenhanter/article/details/24771913

2。但是上面只给了理论啊,我还是不能写出来啊。所以又看了一个博客,有代码的,看代码仔细琢磨琢磨好像更有感觉了。

海子的博客:http://www.cnblogs.com/dolphin0520/archive/2011/08/26/2155202.html

3。这个博客其实是最早看的,但是好像看不太懂。再后来看了理论跟代码,再回去看,就有一丢丢理解了。并且给了代码模板,可以a几个用到最短路径的题目。

Tanky Woohttp://www.wutianqi.com/?p=1890


引用第一个博客的理论:

(2)   求最短路径步骤

  1. 初使时令 S={V0},T={其余顶点},T中顶点对应的距离值, 若存在<V0,Vi>,为<V0,Vi>弧上的权值(和SPFA初始化方式不同),若不存在<V0,Vi>,为Inf。
  2. 从T中选取一个其距离值为最小的顶点W(贪心体现在此处),加入S(注意不是直接从S集合中选取,理解这个对于理解vis数组的作用至关重要),对T中顶点的距离值进行修改:若加进W作中间顶点,从V0到Vi的距离值比不加W的路径要短,则修改此距离值(上面两个并列for循环,使用最小点更新)。
  3. 重复上述步骤,直到S中包含所有顶点,即S=V为止(说明最外层是除起点外的遍历)。
这个很重要的一个思想是贪心,每次都从最短的距离开始遍历。

0 0