Algorithm 一条边变为零的最短路径

Algorithm 一条边变为零的最短路径,algorithm,shortest-path,Algorithm,Shortest Path,给定一个无向加权图G和两个顶点:起始顶点和结束顶点 最有效的算法是什么?它能找到从开始到结束的最短路径,并能将恰好一条边的权重变为零 编辑: 我知道dijkstra算法,但正如我所说, 这个问题的情况是不同的:我们可以把一条边变成零 我想知道如何有效地解决这个问题, 实际上,一种方法是迭代地将边权重设置为零!并在每一步中应用dijkstra算法, 但是,我正在寻找更有效的方法 感谢常用于解决此类问题。另外,这听起来有点像问题,但我可能在这方面错了。你可以在一个两倍大小的增广图上使用Djikstr

给定一个无向加权图G和两个顶点:起始顶点和结束顶点

最有效的算法是什么?它能找到从开始到结束的最短路径,并能将恰好一条边的权重变为零

编辑: 我知道dijkstra算法,但正如我所说, 这个问题的情况是不同的:我们可以把一条边变成零

我想知道如何有效地解决这个问题, 实际上,一种方法是迭代地将边权重设置为零!并在每一步中应用dijkstra算法, 但是,我正在寻找更有效的方法


感谢

常用于解决此类问题。另外,这听起来有点像问题,但我可能在这方面错了。

你可以在一个两倍大小的增广图上使用Djikstra算法来解决这个问题

假设有顶点1…n

定义一个新的图形,以便对于原始图形中每个权重为w的边a->b,定义权重为w的边a->b,定义权重为0的边a->b+n,以及权重为w的边a+n->b+n

其思想是顶点n+1..n+n是包含原始图形副本的副本。从原始移动到副本表示使用将边变为0的特殊能力。请注意,在复制后,无法返回原始图形,因此此特殊功能只能使用一次


因此,您只需要解决增广图上的问题,即从开始到结束+n,以找到最短路径,包括将单个权重设置为0的能力。

您是在问如何?或者,如何有效地进行?不管怎样,这个问题都是重复的。不,我知道dijkstra算法,但是,正如我所说,我们可以将一条边的权重变为零(而不是删除边!),我想知道如何使用dijkstra或其他方法有效地解决这个问题!Djikstra's应该处理0的边权重,没有问题。我知道,但原始图形没有0权重边,我必须确定将哪个边旋转到零会导致从开始到结束的最小路径,