Floyd算法实验报告

大城市里の小女人 提交于 2020-03-10 22:14:11
  1. 问题[描述算法问题,首选形式化方式(数学语言),其次才是非形式化方式(日常语言)]
    弗洛伊德算法定义了两个二维矩阵: 矩阵D记录顶点间的最小路径 例如D[0][3]= 10,说明顶点0 到 3 的最短路径为10; 矩阵P记录顶点间最小路径中的中转点 例如P[0][3]= 1 说明,0 到 3的最短路径轨迹为:0 -> 1 -> 3。
  2. 解析[问题的理解和推导,可用电子版直接在此编写,也可用纸笔推导,拍照嵌入本文档]
  3. 在这里插入图片描述
  4. 设计[核心伪代码]
    //这里是弗洛伊德算法的核心部分 //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];//更新最小路径中间顶点
    }
    }
    }
    }
  5. 分析[算法复杂度推导]三重循环,算法复杂度为O(N^3)
  6. 源码[github源码地址]
  7. https://github.com/hackkkkkk/calculate
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!