Floyd算法与Dijkstra算法求最短距离
目录
1. 问题
(1)用Floyd算法求解下图各个顶点的最短距离。写出Floyd算法的伪代码和给出距离矩阵(顶点之间的最短距离矩阵),按实验报告模板编写算法。
(2) 对于下图使用Dijkstra算法求由顶点a到顶点h的最短路径,按实验报告模板编写算法。
2. 解析
(1)Floyd算法
(2)Dijkstra算法
3. 设计
(1) Floyd算法:
Floyd(){
枚举顶点k ∈ [1,n]
以顶点k为中介点,枚举所有顶点对i和j(i ∈ [1,n],j ∈1[1,n])
如果dis[i][k] + dis[k][j] <dis[i][j]成立
赋值dis[i][j] = dis[i][k] + dis[k][j]
}
(2) Dijkstra算法:
Dijkstra(G,d[],s){
初始化
for(循环n次){
u = 使dis[u]最小的还未访问的顶点的标号;
记u已被访问;
for(从u出发能到达的所有顶点v){
if(v未被访问&&以u为中介点使s到顶点v的最短距离dis [v]更优){
优化d[v];
}
}
}
}
4. 分析
(1)Floyd算法:
时间复杂度为O(n^3)
(2)Dijkstra算法:
时间复杂度为O(e·logu)(e边数,u顶点数)