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

2019-07-29 01:49发布

给定一个定向加权无环图,我努力适应弗洛伊德 - Warshall算法来算2个顶点之间的路径的数量。 我的代码目前看起来是这样的:

在1到n Aij的= Aij的+(AIK * Akij)所有k到n对于所有的i在1至n对所有的j在1。

因此,不是检查和更换的最小距离,我做了以下内容:

的(之间的路径计数ij不含) k +(从路径计数ik *从路径计数k * j

我的阵列天线的最终,应该有任何2个顶点之间的路径数。

我不能证明这并没有给我的2个顶点之间的简单路径的数量,但没有建议在其他地方使用这种方法。

有人可以提供一个反例,其中失败?

PS:这不是我的功课,而只是一个编程练习,我拿起。

Answer 1:

在无向加权无环图中有任何两个顶点之间为至多1条路径。 如果有更多不同的路径,他们将创造一个循环。 (不相关的问题进行修改后)

对于有向图,我没有看到您的算法有问题。 修改弗洛伊德- Warshall算法的使用中其实提到这个文件 。 它没有被广泛使用的原因可能是它的复杂性-的O(3例 )相比,O(M + N) 这种简单的方法



Answer 2:

在循环图的情况下,你不能用直弗洛伊德 - Warshall算法做到这一点,因为计算简单路径需要你跟踪你去过的地方。 动态规划假设被计算的状态只有在复发,这是不是真的在这种情况下,状态的函数。

不过,我不明白为什么这是行不通的。 但是,为什么用弗洛伊德 - 沃肖尔计算只有两个verticies(只使用一个DFS或BFS)。



文章来源: Using Floyd-Warshall algorithm to count number of paths between 2 vertices