目录
狄克斯特拉算法
狄克斯特拉算法(Dijkstra)是由荷兰计算机科学家狄克斯特拉于1959年提出的。是从一个顶点到其余各顶点的最短路径算法,解决的是有权图中最短路径问题。迪杰斯特拉算法主要特点是从起始点开始,采用贪心算法的策略,每次遍历到始点距离最近且未访问过的顶点的邻接节点,直到扩展到终点为止。
迪克斯特拉算法原理
Dijkstra算法是典型的单源最短路径算法,用于计算一个节点到其他所有节点的最短路径。主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止。
原理:根据初始点,挨个的把离初始点最近的点一个一个找到并加入集合,集合中所有的点的距离都是该点到初始点最短路径长度,由于后加入的点是根据集合S中的点为基础拓展的,所以也能找到最短路径。
过程可以参考下图
我们来具体分析一下算法过程:
1.先建立三个表格
第一个表是加权图的表格描述,
第二个表是到每个节点的最短距离,我们姑且称为最低费用表 ,可以看到我们整个算法过程都是围绕这个表格展开的。
第三个表是当前最低费用表数据生成的路径描述,由各节点当前选择的父节点组成。用于算法完成后出发节点S到终点节点F的最短路径的生成。
2.从S点出发,先更新到邻居节点的距离,到达A和B分别是5和0,此时我们只知道S→A和S→B两个路径,所以我们对最低费用表,更新A 为 5和B 为 0。同时更新父节点表中A、B的父节点。
具体如下图。(最低费用表代表我们当前能找到的到达相应节点最短的距离,父节点表代表相应路径中节点的父节点。)