使用Floyd-Warshall算法计算2个顶点之间的路径数

时间:2012-04-19 16:14:10

标签: algorithm graph floyd-warshall

给定一个有向无加权的acylic图,我试图调整Floyd-Warshall算法来计算2个顶点之间的路径数。我的代码目前看起来像这样:

表示1到n中的所有k      对于所有我在1到n        对于1到n中的所有j             Aij = Aij +(Aik * Akij)。

因此,我没有检查和替换最小距离,而是执行以下操作:

ij)之间没有k +的路径数(从ik的路径数量*来自{{的路径数量1}} * k

我的最终数组应该有任意2个顶点之间的路径数。

我无法证明这不会给我两个顶点之间的简单路径计数,但是没有建议在其他地方使用这种方法。

有人可以提供失败的反例吗?

PS:这不是我的作业,而只是我选择的编程练习。

2 个答案:

答案 0 :(得分:5)

在无向无加权的acylic图中,任意两个顶点之间最多有1条路径。如果有更多不同的路径,它们会创建一个循环。 (在编辑问题后不相关)

对于有向图,我没有看到您的算法有问题。在this paper中实际提到了修改的Floyd-Warshall算法的用法。它没有被广泛使用的原因可能是它的复杂性 - O(n 3 )与this simple approach的O(m + n)相比

答案 1 :(得分:2)

在循环图形情况下,使用直接Floyd-Warshall算法无法做到这一点,因为计算简单路径需要您跟踪您去过的地方。动态编程假定计算的状态只是递归状态的函数,在这种情况下不是这样。

但是,我不明白为什么不会工作。但是为什么使用Floyd-Warshall来计算两个顶点(只使用DFS或BFS)。