1.问题
用Floyd算法求解下图各个顶点的最短距离。写出Floyd算法的伪代码和给出距离矩阵(顶点之间的最短距离矩阵),按实验报告模板编写算法。

对于下图使用Dijkstra算法求由顶点a到顶点h的最短路径,按实验报告模板编写算法。

。
2.解析
Floyd算法:
求点i到点j的最短路径。直接从i到j或者从i出发经过其他若干个k到达j。对于每个顶点i,j判断是否存在k使得i到j的距离更短。
Dijkstra算法:
首先把起点到所有点的距离存下来找个最短的,然后遍历一遍看通过刚刚找到的距离最短的点作为中转站会不会更近,如果更近了就更新距离再找出最短的,这样把所有的点找遍之后就存下了起点到其他所有点的最短距离。
3.设计
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]
Dijkstra算法:
Dijkstra(G,d[],s){
初始化
for(循环n次){
u = 使dis[u]最小的还未访问的顶点的标号;
记u已被访问;
for(从u出发能到达的所有顶点v){
if(v未被访问&&以u为中介点使s到顶点v的最短距离dis [v]更优){
优化d[v];
}
}
}
}
4.分析
Floyd:O(n^3)
Dijkstra:O(e·logu)(e边数,u顶点数)
5.源码
https://github.com/lmouette/-/blob/main/floyd.cpp
https://github.com/lmouette/-/blob/main/dijkstra.cpp
本文详细介绍了Floyd和Dijkstra两种经典的图算法。Floyd算法用于解决任意两点间的最短路径问题,通过枚举中介节点的方式进行迭代优化;而Dijkstra算法则解决了单源最短路径问题,通过不断寻找并更新当前可达范围内最短路径来逐步求解。
1018

被折叠的 条评论
为什么被折叠?



