文档介绍:最短路径Dijkstra算法
2020/12/2
1
1 最短路径
两点之间的最短路径问题:
求从某个源点到其余各点的最短路径
每一对顶点之间的最短路径
2020/12/2
2
精品资料
3
你怎么称呼老师?
如果老师最后没有总结一节课的重点的难点,你是否会认为老师的教学方法需要改进?
你所经历的课堂,是讲座式还是讨论式?
教师的教鞭
“不怕太阳晒,也不怕那风雨狂,只怕先生骂我笨,没有学问无颜见爹娘 ……”
“太阳当空照,花儿对我笑,小鸟说早早早……”
4
求从源点到其余各点的最短路径的算法的基本思想:
依最短路径的长度递增的次序求得各条路径
源点
v1
v2
…
其中,从源点到顶点v的最短路径是所有最短路径中长度最短者。
2020/12/2
5
2 Dijkstra算法
单源最短路径问题是:
给定带权的有向图G=(V,E),源点v∈V,求从v到V中其余各顶点的最短路径。
如何求解上图中的最短路径问题,Dijkstra提出了一种解决方案。
2020/12/2
6
即迪杰斯特拉算法,其基本思想如下:
设置辅助数组Dist,其中每个分量Dist[k] 表示 当前所求得的从源点到其余各顶点 k 的最短路径的长度。
1)在所有从源点出发的弧中选取一条权值最小的弧,即为第一条最短路径。
V0和k之间存在弧
V0和k之间不存在弧
2020/12/2
7
3)每次从集合V-S中取出具有最短特殊路径长度的顶点u,将u加到S中,同时对数组Dist做必要的修改。若 Dist[u]+[u][k]<Dist[k]
则将 Dist[k] 改为 Dist[u]+[u][k]。
其中,特殊路径指从源点到u中间只经过S中顶点的路径。
2)设置一个顶点集合S,存放最短路径的终点。顶点k为当前最短路径的终点,将Vk 加入集合S中,而Dist[k]为最短路径的长度。
4) 重复操作2)、3)共n-1次。由此求得图上其余各顶点的最短路径是依路径长度递增的序列。
2020/12/2
8
若带权图G如下所示,根据上述算法来求解源点v0到v2的最短路径。
2020/12/2
9
根据以上分析和举例,不难得出狄杰斯特拉算法,其描述如下:
Void shortestPath(MGraph G,int V0, PathMatrix &P, ShortPathTable &D)
//P[v]表示最短路径,D[v]表示带权长度
//P[v][w]为TRUE,则w是从v0到v当前求得最短路径上的顶点
//final[v]为TRUE,即已经求得从v0到v的最短路径
{ for(v=0;v<;v++){
final[v]=FALSE;
D[v]=[v0][v];
for(w=0;w<;w++) P[v][w]=FALSE;//设置空路径
if(D[v]<INFINTY){P[v][v0]=TRUE;p[v][v]=TRUE;}
}
2020/12/2
10