Dijkstra算法——单源最短路
——可用该算法求的一个点(源点)到其余各个顶点的最短距离。
——例如,s,e1,e2,e3,e4。
假定s是源点,利用Dijkstra算法可知
s——e1的最短距离
s——e2的最短距离
s——e3的最短距离
s——e4的最短距离
注:无向边时,源点到其它点的距离等于其它点到源点的距离。
拓展:
——有向边的情况下:还可求其它点到源点的最短路。
只需要将所有边方向反转,
再求一次源点到其它点的最短路即可。
想想看:
求得的s---->e1的距离,其实你会发现这条路的边都是反向的,即其实是e1---->s的最短路。
POJ - 3268 ----------------> 题解
POJ - 1511
须知:
- 顶点与顶点之间的距离不能为负
- 边可以无向边,也可以是有向边
- 松弛操作:和Floyd一样,通过点来缩短其它点与源点之间的距离。比如e[1][3]=10;e[1][2]=4,e[2][3]=1,最后e[1][3]=5。
单源最短路的思想:
n个点,求出源点到其它n-1个顶点的最短路。
搜索第一个与源点最近的点:
从(n-1)个点中找出一点离源点最近的点,
该点到源点的距离一点是最短。
为什么呢?
因为每条边都是正的,
如果你再经过其它点到该点,那么距离一定会增大。
然后再利用该点去缩短源点到别的点的距离。
就跟多源最短路径一样,所有的点会利用到的。