JoeChenzzz

导航

dijkstra算法(贪心算法)——解决最短路径问题

最短路径

  给定一张带权图和其中的一个点(作为源点),求源点到其余顶点的最短路径

基本思想

1)源点u,所有顶点的集合V,集合S(S中存有的顶点,他们到源点的最短路径已经确定,源点u默认在S中),集合V-S(V-S中的顶点,他们到源点的最短路径待确定)

2)特殊路径:从源点u出发经过集合S中的所有点到集合V-S中的某个点(这个点是上一次加入S的顶点的邻节点)的路径

3)贪心策略:每次选择当前特殊路径长度最短的路径,将新连接的点加入集合S,并在V-S中去除,直到S中包含了所有顶点

4)从源点u出发,先选相邻点中距离自己最短的那个相邻点,记为相邻点1,加入集合S

5)再从相邻点1的相邻点中找出一个点,它的特殊路径最短,再把它加入到集合S中

6)反复操作,直到集合S含有全部的顶点

算法设计

1.集合S和集合V-S可以用一个bool型的数组的形式来表现

2.初始时集合S中只含有源点u

3.数组dist[]记录当前所有顶点的最短路径长度,某些点还未计算出来时,数组dist[]对应项填入一个极大值,如:INT_MAX

时间复杂度

  O(n2)

代码实现

  未完待续

posted on 2018-09-03 11:54  JoeChenzzz  阅读(1002)  评论(0编辑  收藏  举报