Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.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
C/C++;执行邻接距离矩阵的最佳算法[由Floyd Warshall解决]_C_Algorithm - Fatal编程技术网

C/C++;执行邻接距离矩阵的最佳算法[由Floyd Warshall解决]

C/C++;执行邻接距离矩阵的最佳算法[由Floyd Warshall解决],c,algorithm,C,Algorithm,大家好 我已经找到了几个算法来完成这项任务。但是,所有这些代码都考虑每个节点或边缘的权重值。 我的目标比这简单,它是从邻接矩阵得到距离矩阵 投入将是: INITIAL ISSUE a b c d e f connected vertices to i a 0 1 0 0 0 0 1 b 1 0 1 1 0 0 3 c 0 1 0 0 0 0 1 d 0 1 0 0 1 0 2 e 0 0 0 1 0 1 2 f 0 0 0 0 1 0 1

大家好

我已经找到了几个算法来完成这项任务。但是,所有这些代码都考虑每个节点或边缘的权重值。 我的目标比这简单,它是从邻接矩阵得到距离矩阵

投入将是:

INITIAL ISSUE
  a b c d e f    connected vertices to i
a 0 1 0 0 0 0    1
b 1 0 1 1 0 0    3
c 0 1 0 0 0 0    1
d 0 1 0 0 1 0    2
e 0 0 0 1 0 1    2
f 0 0 0 0 1 0    1
                ---
            Sum: 10  -> Edges = Sum/2 = 5
产出将是:

INITIAL ISSUE
  a b c d e f    connected vertices to i
a 0 1 0 0 0 0    1
b 1 0 1 1 0 0    3
c 0 1 0 0 0 0    1
d 0 1 0 0 1 0    2
e 0 0 0 1 0 1    2
f 0 0 0 0 1 0    1
                ---
            Sum: 10  -> Edges = Sum/2 = 5
提前感谢您的建议

大卫·亚历杭德罗

  a b c d e f
a 0 1 2 2 3 4
b 1 0 1 1 2 3
c 2 1 0 2 3 4
d 2 1 2 0 1 2
e 3 2 3 1 0 1
f 4 3 4 2 1 0
弗洛伊德·沃沙尔·克内尔在C

SOLUTION FOUND
for(k=0;k
如果您已经找到只使用权重关联的算法,请使用它们,但将每个权重设置为1

在任何情况下都是我的建议。

更改邻接矩阵中“无限”(即大于任何合理距离)值的零,然后在生成的矩阵上运行


NominSim建议的BFS需要从每个起始顶点开始运行,以获得所有顶点的距离。

到目前为止,理论上最好的重复似乎是
O(n²log n)
(参见),但我不能真正理解它。(:Gracias…'Tanta'Marcha…BFS n次->O(mn+n²).Floyd Warshall更容易编码。但是带有邻接矩阵的O(mn)是O(n^3),所以它们都是O(n^3)。无论如何,我不是在比较效率,我只是说普通BFS只解决单源最短路径,而OP要求所有对。好的建议。对于基本需求,最好的方法是深入!