我遇到了一些问题。 首先,我使用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,路径(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];
}
}
}
}
我真的不知道我需要改变什么来获得正确的结果(或者这可能是正确的结果,我认为不是。)