algorithm - 查找非边缘相交的最短路径的数量

标签 algorithm computer-science graph-theory shortest-path

给定一个加权无向图,开始和结束顶点,我需要找到完全相等的(在权重总和中)最短路径的数量,这些路径不在任何边缘相交

我在这里尝试使用 Ford-Fulkerson 算法,但它只给出了可能的最大数量,并没有找到最短路径。

在 Ford-Fulkerson 期间使用 Dijkstra 算法寻找路径也无济于事,因为它可能会找到一条或多条边连接最优解路径的路径。

据我所知,有一些类似问题的答案,但使用的是未加权和有向图。我想我需要某种蛮力方法来按某种顺序去除边缘。或者可能有解决此问题的已知方法?谢谢。

编辑 1:这是显示 Dijkstra 走错路的示例的图表。红色边缘(最有可能)将首先被发现,这将使最佳解决方案成为不可能。我看到算法的目标是以某种方式移除所有红色边缘并执行 Vedang Mehta 建议的操作

Example graph

最佳答案

我们可以先计算dis[u] := 从start到u的最短路径的长度。

然后我们从dis[]和G构造一个有向图(流网络)G':

检查 G 中的每条边 (u,v)

if dis[u] = dis[v] + weight(u,v) then add a direct edge (u->v) to G'(capacities 1)

if dis[v] = dis[u] + weight(u,v) then add a direct edge (v->u) to G'(capacities 1)

非边相交的最短路径的最大数目恰好是

G' 上从起始顶点到结束顶点的最大流量。

正确性证明

显而易见。

这是一个实现

http://lemon.cs.elte.hu/pub/doc/latest-svn/a00238.html

关于algorithm - 查找非边缘相交的最短路径的数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37595234/

相关文章:

java - 验证下一个字符是否与第一个字符相同

synchronization - 分布式客户端之间同步状态的方式

naming-conventions - 为什么人们将 "my"添加到变量名中?

graph - 二部连通图证明

algorithm - 寻找树中的最短路径

ruby - 用另一个字符替换 Ruby 中的字符

algorithm - 将二叉树的前序列表转换为后序列表,反之亦然

assembly - 指令集和指令集架构(ISA)有什么区别?

graph - 在图中找到最小割,使得给定的顶点不连接

java - 如何在 O(n) 中获得二维数组中的最大和?