Algorithm 增量Dijkstra算法还是最短路径算法?

Algorithm 增量Dijkstra算法还是最短路径算法?,algorithm,graph-algorithm,dijkstra,shortest-path,Algorithm,Graph Algorithm,Dijkstra,Shortest Path,我有一个初始的有向图G,从中我不时地删除边(从不添加新边)。我不删除节点(尽管有些节点可能会断开连接)。 有没有一种方法可以在不重新运行Dijkstra的情况下高效地重新计算最短路径?初始节点从不更改 如果没有Dijkstra算法的增量版本,其他算法也可以。但我不能使用*(我记得它有一个增量版本),因为我没有任何启发来知道我离目的地有多远 谢谢您可以跟踪使用的边。如果删除一个节点,则可以使用它们查找需要更新的所有节点 其余的节点不需要更新。如果删除边,则只能使路径变长 运行所有边缘,如果源不需要

我有一个初始的有向图G,从中我不时地删除边(从不添加新边)。我不删除节点(尽管有些节点可能会断开连接)。 有没有一种方法可以在不重新运行Dijkstra的情况下高效地重新计算最短路径?初始节点从不更改

如果没有Dijkstra算法的增量版本,其他算法也可以。但我不能使用*(我记得它有一个增量版本),因为我没有任何启发来知道我离目的地有多远


谢谢

您可以跟踪使用的边。如果删除一个节点,则可以使用它们查找需要更新的所有节点

其余的节点不需要更新。如果删除边,则只能使路径变长

运行所有边缘,如果源不需要更新,但目标确实将目标添加到Dijkstra优先级队列中。 完成后,运行常规的Dijkstra算法来计算新的成本


也就是说,如果从源代码中删除一个链接,您可能仍然会运行整个dijkstra。因此,这可能只在您不尝试删除已使用的链接(因为删除的链接很有可能不会被使用)或删除链接使其远离源(这样您只需更新几个节点)时才有用。

我想我知道您的意思,但如果我一次删除两条边(可能会发生这种情况),该怎么办?这意味着我需要把这些边的头节点放在堆栈中,但是要按一定的顺序,不是吗?首先他是一个离源头更远的人,然后是离源头更近的人?谢谢