Java Dijkstra算法是否有双向搜索的实现?

Java Dijkstra算法是否有双向搜索的实现?,java,algorithm,graph-theory,dijkstra,shortest-path,Java,Algorithm,Graph Theory,Dijkstra,Shortest Path,我正在寻找Dijkstra(或任何其他源到目的地最短路径算法)在Java中的双向搜索(也称为“中间相遇”算法)的实现 双向搜索处理比它看起来更复杂(),我想在重新创建车轮之前考虑现有的实现! 注:我说的是,不要与双向图形混淆) 下面是一个棘手的图表示例: 是的,至少在Java中有: 在双向Dijkstra算法中,实际上维护两个“Dijkstra算法”:向前搜索和向后搜索。现在,正向搜索非常类似于单向Dijkstra算法。然而,反向搜索以“反向”方式进行。如果存在一条有向边(通俗地称为弧)(u,v

我正在寻找Dijkstra(或任何其他源到目的地最短路径算法)在Java中的双向搜索(也称为“中间相遇”算法)的实现

双向搜索处理比它看起来更复杂(),我想在重新创建车轮之前考虑现有的实现! 注:我说的是,不要与双向图形混淆)

下面是一个棘手的图表示例:


是的,至少在Java中有:

在双向Dijkstra算法中,实际上维护两个“Dijkstra算法”:向前搜索和向后搜索。现在,正向搜索非常类似于单向Dijkstra算法。然而,反向搜索以“反向”方式进行。如果存在一条有向边(通俗地称为
(u,v)
,则向前搜索将从
u
遍历到
v
,而向后搜索将在相反方向进行同样的操作

因为这两个搜索过程(通常)在源节点和目标节点之间的某个地方相遇,所以我们需要另一个终止条件,在双向Dijkstra算法中是

g(top(OPEN_forward)) + g(top(OPEN_backward)) > l
其中
l
是源节点和目标节点之间已知的最短路径的长度


您可能只在双向版本中看到的其他代码是检查缩短最短路径候选路径的可能性,每次改进任何节点的
g
值。(一个节点的
g
u
是从搜索开始的节点到
u
的最短距离(目前已知)

我对双向图的实现与定向情况完全相同-我只是添加了两条边,而不是一条边。我不知道你为什么认为它更难。双向dijkstra意味着dijkstra从源和目标并行处理,降低了复杂性和成本。看,我认为可能不清楚何时停止搜索,因为如果我们在会议后立即停止搜索,就不能保证路径是最短的。停止得太晚会导致算法变慢。有点晚。。。但是看看@user502144,你就知道了。停车条件不是很明显,但有一个。请参阅@Tunaki是否有可能在SO中编写LaTeX?不,很遗憾,它不是活动的(不像CodeReview中的…)。