最短路径

来源:互联网 发布:搞怪软件p图软件 编辑:程序博客网 时间:2024/05/04 20:35

问题描述:

给定一个网络,如何计算两点之间的最短路径。

这里的路径可以看做一个权重函数,实际中可以是网络延时,成本等。


Dijkstra‘s 算法:(动态规划思想)

思路: 假设A到B的最短路径是A-C-B,则显然A-C与C-B均为最短路径。

             这样就符合子问题也是最优解的条件。

具体算法:

构建2个集合  A, B

A为以已计算好最短路径点的集合, B为其余顶点集合。

初始A只包含出发点a,其余顶点放入B。


步骤1: 将出发顶点a入集合A,其余顶点入集合B。并计算w(b) = weight(a,b)

while (集合B非空)

从集合B中选择一个顶点b,满足w(b)最小

       将b从集合B移出,并放入集合A

       更新集合B中与b相连的顶点c (如果w(c) > w(b) + weight(b,c), w(c) = w(b) + weight(b,c))


最后,得到的w(b)即为各顶点到a的最短距离。


0 0