Floyd算法实验报告
问题[描述算法问题,首选形式化方式(数学语言),其次才是非形式化方式(日常语言)] 弗洛伊德算法定义了两个二维矩阵: 矩阵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_