- 问题[描述算法问题,首选形式化方式(数学语言),其次才是非形式化方式(日常语言)]
弗洛伊德算法定义了两个二维矩阵: 矩阵D记录顶点间的最小路径 例如D[0][3]= 10,说明顶点0 到 3 的最短路径为10; 矩阵P记录顶点间最小路径中的中转点 例如P[0][3]= 1 说明,0 到 3的最短路径轨迹为:0 -> 1 -> 3。 - 解析[问题的理解和推导,可用电子版直接在此编写,也可用纸笔推导,拍照嵌入本文档]
- 设计[核心伪代码]
//这里是弗洛伊德算法的核心部分 //k为中间点
for(k = 0; k < G.vexnum; k++){
//v为起点
for(v = 0 ; v < G.vexnum; v++){
//w为终点
for(w =0; w < G.vexnum; w++){
if(D[v][w] > (D[v][k] + D[k][w])){
D[v][w] = D[v][k] + D[k][w];//更新最小路径 P[v][w] = P[v][k];//更新最小路径中间顶点
}
}
}
} - 分析[算法复杂度推导]三重循环,算法复杂度为O(N^3)
- 源码[github源码地址]
- https://github.com/hackkkkkk/calculate
来源:CSDN
作者:ice___cream
链接:https://blog.csdn.net/ice___cream/article/details/104779304