[Data Structure & Algorithm] 带权有向图的最短路径

最短路径 - 从顶点A(源点)到顶点B(终点),权值最小的路径

Dijkstra算法 - 一个源点与其他点之间的最短路径

  • 基本思路 - 设 图中的顶点集为V; 最短路径已确定的顶点集为S
    1.将源点添加到S中
    2.计算出每个顶点的估计距离 - 除了终点在V-S中,其余路径中的点都在S中
    3.把最小估计距离所连接的顶点放入S中,此时可能会改变顶点的估计距离
    4.重复2、3,直到所有顶点都在S中,得到源点到其他所有顶点的最小路径,即最小的估计距离
  • 具体实现
    • 引入数组D
      • 长度 - 顶点数-1
      • D[vj] - 从源点到顶点vj的估计距离
      • 初始化数组 - 对于和源点不是直接相连的点vi,D[vi] = 10000(设置一个大于所有权值相加的值)
    • 如果估计距离变小,则更新对应的D中的值
  • 时间复杂度 - O(n2) (邻接表和邻接矩阵相同)

Floyd算法 - 所有点对之间的最短路径

  • 基本思路
    1.把所有点对之间的直接路径权值保存在矩阵中,没有直接路径的记为∞
    2.依次扫描每个点,扫描过的点可以作为中间点,查看增加中间点后, 是否有更小的路径,如果有,更新矩阵中的值
  • 时间复杂度 - O(n3)
posted @ 2018-10-10 20:55  break大蜗牛  阅读(834)  评论(0编辑  收藏  举报