【浙大数据结构】图论算法
图论算法
Dijkstra
前引
令S = {源点s + 已经确定了最短路径的顶点v
i}对任一未收录的顶点v,定义dist[v]为s到v的最短路径长度,但该路径仅经过S中的顶点。即路径{s -> (v
i∈S) -> v}的最小长度若路径是按照递增(非递减)的顺序生成的,则
- 真正的最短路径必须经过S中的顶点
- 每次从未收录的顶点中选一个dist最小的的收录(==贪心==)
- 增加一个v进入S,可能影响另一个w的dist值!
- dist[w] = min{dist[w], dist[v] + <v, w>的权重}
代码示例
1 | void Dijkstra(Vertex s) |
Floyd
前引
- D^k^[ i ] [ j ] = 路径 {i -> {l <= k} -> j} 的最小长度
- D^0^,D^1^, …, D^|v|-1^[ i ] [ j ]即给出了i到j的真正最短距离
- 最初的D^-1^,给两个顶点有直接边相连的D[i] [j]赋权值,没有直接边相连的赋 INF
- 当D^k-1^已经完成,递推到D^k^时:
- 或者k ∉ 最短路径}{ i -> {i <= k} ->j },则D^k^ = D^k-1^
- 或者k ∈ 最短路径{ i -> {i <= k} ->j },则该路径必定有两端最短路径组成:D^k^[i] [j] = D^k-1^[i] [k] + D^k-1^[k] [j]
代码示例
1 | void Floyd() |
初始状态

最终状态
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 星の夜!