使用场景
获得一个图中一点到其他各点最短距离
由于算法只与点数量有关,边数量无关,故适用于密集图。
编码
- 输入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;