【问题标题】:Dijkstra's Algorithm ImplementationDijkstra 的算法实现
【发布时间】:2012-10-29 01:21:30
【问题描述】:

所以我正在编写 Dijkstra 算法的 JavaScript 实现。

我从Wikipedia page 中阅读了很多内容,它帮助我将这些步骤转化为代码。我还阅读了this Stack Overflow question,这是我的问题的一部分。

从A出发,唯一的路径是B,这给了我们

O => AB = 12;

O => C = 7

C 现在是最小距离,是新的当前节点

O => CD = 8

由于 D 是目的地且 8

您如何将这一决定落实到代码中?现在,我的脚本基于哪个节点来选择哪些节点与当前节点相邻,是否每个决策都需要通过这种新的评估来运行?

顺便说一句,here 是我的(凌乱的)代码。

【问题讨论】:

  • 您的代码看起来有点乱,因为您没有为currentEdgecurrentNeighbor 使用局部变量。此外,您应该首先找出哪个(c1c2)是邻居节点,然后对其应用条件而不是重复该 if 语句。还没有往下看……

标签: javascript graph-theory dijkstra


【解决方案1】:

我的脚本根据与当前节点相邻的节点选择哪个节点

没有。您的connectedNodes 列表(按距离排序)应该是全局的,而不仅仅是当前节点。

然后,对于第一个(最小距离)节点,将所有未访问的邻居添加到列表中,仍然按距离排序。标记当前访问的节点并继续下一个最小距离未访问的节点。

【讨论】:

  • 现在函数会输出一个 13 个空格长的随机节点数组:PasteBin
  • 感谢您帮助我清理我的代码并让它更有意义,但是这个答案仍然没有回答我关于如何实施决定的问题。我的脚本中没有明确的指标表明存在某个正确或最短的路径,只是算法查看了哪些节点,以及最终的距离是多少。
  • 要获取找到的路径,您需要为添加到列表中的每个节点保存前驱。然后你可以从结束节点回到开始节点的这条路线
  • 所有节点都连接到多个节点上,前任是什么意思?最后看的那个?而这又是如何实现最短路径逻辑的呢?
  • 是的,从它开始测量距离。如果更新最小距离,也会更新前任。这就是算法的工作原理。
猜你喜欢
  • 2022-01-05
  • 1970-01-01
  • 2021-04-21
  • 2014-06-23
  • 2011-09-13
  • 1970-01-01
  • 2019-04-02
  • 2015-02-05
相关资源
最近更新 更多