问题描述:
给定一个网络,如何计算两点之间的最短路径。
这里的路径可以看做一个权重函数,实际中可以是网络延时,成本等。
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的最短距离。
原文:http://blog.csdn.net/levinjoe/article/details/21882683