我对此有一些问题。首先,我使用 Floyd-warshall 在有向图上显示所有最小周期并且它有效,但后来我尝试将它与无向图一起使用,但它不像我需要的那样工作。
例如,假设我有这个图表:
INF INF 19 14 8
INF INF 13 INF 9
19 13 INF INF 3
14 INF INF INF 10
8 9 3 10 INF
这应该看起来像这样:
无论如何,由于您可以将无向图表示为有向图(就像我在示例矩阵中所做的那样),Floyd Warshall 应该可以工作,但结果不是我所期望的。使用相同的图形示例,这是具有最小路径成本的矩阵:
最小路径成本:
16 17 11 14 8
17 18 12 19 9
11 12 6 13 3
14 19 13 20 10
8 9 3 10 6
这是带有路径的矩阵:
(0 4 0) (0 4 1) (0 4 2) (0 3) (0 4)
(1 4 0) (1 4 1) (1 4 2) (1 4 3) (1 4)
(2 4 0) (2 4 1) (2 4 2) (2 4 3) (2 4)
(3 0) (3 4 1) (3 4 2) (3 4 3) (3 4)
(4 0) (4 1) (4 2) (4 3) (4 2 4)
因为我只对循环感兴趣,所以我只需要矩阵的对角线。
无论如何,让我们取 0 - > 0:结果是 (0 4 0),成本是 16
无论如何,因为我正在寻找最小周期,所以我期望类似:
0 -> 0, Path (0 4 2 0) (或 0 2 4 0 因为是无向图,但我只需要其中一个),成本为 30。
这实际上是 floyd-warshall 代码:
for (k = 0; k < V; k++)
{
for (i = 0; i < V; i++)
{
for (j = 0; j < V; j++)
{
if (dist[i][k] != INF && dist[k][j] != INF &&
dist[i][k] + dist[k][j] < dist[i][j]) {
dist[j][i] = dist[i][j] = dist[i][k] + dist[k][j];
path[i][j] = path[j][i] = path[k][j];
}
}
}
}
我真的不知道我需要改变什么才能得到正确的结果(或者这可能是正确的结果,我认为不是)。