gpt4 book ai didi

java - Floyd-Warshall 算法 - 代表 "infinity"

转载 作者:搜寻专家 更新时间:2023-11-01 02:25:40 27 4
gpt4 key购买 nike

使用Floyd-Warshall算法寻找两个顶点之间的最短路径,在Java中实现时应该如何表示无穷大?我在这里使用无穷大表示两个顶点之间没有路径。

谢谢

最佳答案

答案取决于您用来表示权重的数据类型。如果它是 double,您可以安全地使用 Double.POSITIVE_INFINITY。如果它是一个整数,请选择一个您不使用的值,例如如果您的图形不允许负边缘,则为负。

一个不幸的后果是你需要注意三个循环中的无穷大元素:而不是使用“直接”加法,你需要检查它是否是特殊的“无穷大”值,并且只然后做加法:

final int INFINITY = -1;
...
for (int k = 0 ; k != N ; k++) {
for (int i = 0 ; i != N ; i++) {
for (int j = 0 ; j != N ; j++) {
if (g[i][k] == INFINITY || g[k][j] == INFINITY) continue;
int total = g[i][k] + g[k][j];
if (g[i][j] != INFINITY) {
g[i][j] = Math.min(g[i][j], total);
} else {
g[i][j] = total;
}
}
}
}

关于java - Floyd-Warshall 算法 - 代表 "infinity",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23586650/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com