Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 使用Floyd Warshall算法计算两个顶点之间的路径数_Algorithm_Graph_Floyd Warshall - Fatal编程技术网

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

Algorithm 使用Floyd Warshall算法计算两个顶点之间的路径数,algorithm,graph,floyd-warshall,Algorithm,Graph,Floyd Warshall,给定一个有向无权无环图,我尝试采用Floyd Warshall算法来计算两个顶点之间的路径数。我的代码当前如下所示: 对于1到n中的所有k 对于1到n中的所有i 对于1到n中的所有j Aij=Aij+Aik*Akij 因此,我没有检查和更换最小距离,而是执行以下操作: 不带k的i,j之间的路径计数+从i到k的路径计数*从k*j的路径计数 我的最后一个数组应该有任意两个顶点之间的路径数 我无法证明这并没有给出两个顶点之间简单路径的计数,但没有建议在其他地方使用这种方法 有人能提供一个反例,说明这一

给定一个有向无权无环图,我尝试采用Floyd Warshall算法来计算两个顶点之间的路径数。我的代码当前如下所示:

对于1到n中的所有k 对于1到n中的所有i 对于1到n中的所有j Aij=Aij+Aik*Akij

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

不带k的i,j之间的路径计数+从i到k的路径计数*从k*j的路径计数

我的最后一个数组应该有任意两个顶点之间的路径数

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

有人能提供一个反例,说明这一点失败了吗

PS:这不是我的家庭作业,只是我学的一个编程练习。

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


对于有向图,我认为您的算法没有问题。中实际提到了改进的Floyd-Warshall算法的用法。它没有被广泛使用的原因可能是它的复杂性——在循环图的情况下,与Om+n的

相比,On3,你不能用straight Floyd Warshall算法做到这一点,因为计算简单路径需要你跟踪你去过的地方。动态规划假设正在计算的状态只是递归中状态的函数,在这种情况下不是这样


然而,我不明白这为什么不起作用。但是为什么只使用Floyd Warshall计算两个垂直方向,而只使用DFS或BFS。

我为输入错误道歉。我指的是有向图。更正了原帖中的错误。太好了,报纸解释了我需要什么。我还假设我可以放弃对角线元素中的结果,如论文中所述,对角线元素最终为非零。我无法证明这并没有给出两个顶点之间简单路径的计数,这意味着什么——为了确定它是否正确,你应该证明它在工作,或者找到一个反例,说明它不是。是的,我可以使用DFS/BFS。但是,我想检查使用Floyd Warshall的正确性。同样,在循环的情况下,在计算结束时,如果对角线元素中的任何一个最终可能是非零值,我可以放弃结果。同样,我明白这不是最有效的。