最短路径迪杰斯特拉算法

发布时间 2023-11-14 00:15:37作者: 苏二七

使用场景

获得一个图中一点到其他各点最短距离

由于算法只与点数量有关,边数量无关,故适用于密集图。

编码

- 输入Graph 数据结构、path[](用于存放每个点前一个路径点)、minDist[](目标点到每个点最短距离)、start起始点

  - 设置一个长度为点个数的visited[],用于标记当前节点已经纳入最短路径

  - 初始化

    - 将visited[start] = true, 同时一个循环将根据邻接矩阵,将start

  - 循环点个数,应为要获得start点到每个点的最短距离(第一个for)

    - for循环minDist寻找 visited[i] == false && minDist[i] < min,即寻找没有被遍历的当前路径长度最小的一个点(第二个for-寻找最先点)

    - 找到后 visitedIndex 与 min 获得了

    - 将当前遍历的点visited[visitedIndex] = true,表明当前点已经被遍历

    - 既然从该点出发到个点考虑最短路径,使用for遍历所有点更新minDist(第三个for-更新个点)

      - 更新newWeight= min + visitedIndex到个点的权重

      - if newWeight<minDist[i]

        - 更新 minDist[i] = newWeight;