【问题标题】:Shortest Path Function (Dijkstra's Algorithm)最短路径函数(Dijkstra 算法)
【发布时间】:2020-04-03 17:45:07
【问题描述】:
我有一个由纬度,经度,节点ID组成的数据框,从NodeID到Node_ID,长度。 from 和 to 节点列是我的边缘。当我试图找到最短的路径时,我只能在我的边缘旅行。我希望能够从一个节点到另一个节点,同时最小化我的总行程。输出应该返回我必须经过才能到达目的地的每个节点。我已经尝试了许多内置包,如 cppRouting 和 igraph,但我无法让任何东西正常工作。关于如何创建函数或如何使用任何现有函数来完成此任务的任何想法?谢谢。
【问题讨论】:
标签:
r
shortest-path
dijkstra
【解决方案1】:
以下是 Dijkstra 算法中用于查找从单个源顶点到给定图中所有其他顶点的最短路径的详细步骤。
算法:
1) 创建一个集合 sptSet(最短路径树集),跟踪包含在最短路径树中的顶点,即计算并确定其与源的最小距离。最初,这个集合是空的。
2) 为输入图中的所有顶点分配一个距离值。将所有距离值初始化为 INFINITE。将源顶点的距离值指定为 0,以便首先拾取它。
3) 虽然 sptSet 不包含所有顶点
….a) 选择一个在 sptSet 中不存在且具有最小距离值的顶点 u。
….b) 将 u 包含到 sptSet。
….c) 更新 u 的所有相邻顶点的距离值。要更新距离值,请遍历所有相邻顶点。对于每个相邻的顶点v,如果u的距离值(来自源)与边u-v的权重之和小于v的距离值,则更新v的距离值。
通过以下链接:Printing Paths in Dijkstra’s Shortest Path Algorithm