gpt4 book ai didi

java - 修改最短路径算法(从节点到自身的路由)

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

我正在将全对最短路径算法 ( Floyd-Warshall ) 应用于此有向图: alt text

图由其邻接矩阵表示。简单的代码如下所示:

public class ShortestPath {

public static void main(String[] args) {
int x = Integer.MAX_VALUE;
int [][] adj= {
{0, 6, x, 6, 7},
{x, 0, 5, x, x},
{x, x, 0, 9, 3},
{x, x, 9, 0, 7},
{x, 4, x, x, 0}};

int [][] D = adj;

for (int k=0; k<5; k++){
for (int i=0; i<5; i++){
for (int j=0; j<5; j++){
if(D[i][k] != x && D[k][j] != x && D[i][k]+D[k][j] < D[i][j]){
D[i][j] = D[i][k]+D[k][j];
}
}
}
}

//Print out the paths
for (int r=0; r<5; r++) {
for (int c=0; c<5; c++) {
if(D[r][c] == x){
System.out.print("n/a");
}else{
System.out.print(" " + D[r][c]);
}
}
System.out.println(" ");
}
}

就算法而言,上述工作正常。

我试图表明从任何节点到它自身的路径不一定一定是0,正如此处使用邻接矩阵所暗示的那样,但可以是任何通过其他节点的可能路径:例如 B -...-...-...-B

有没有一种方法可以修改我当前的表示以指示从 BB 的最短路径不是零,而是 12,遵循 B-C-E-B 路线?能不能通过修改邻接矩阵的方法来实现?

最佳答案

将对角线元素邻接矩阵从 0 更改为无穷大(理论上)应该可行。

这意味着自循环成本是无限的,任何其他小于此成本的路径都更好,因此如果存在从一个节点到自身的路径,通过其他节点,它的成本将是有限的,它将取代无限值。

实际上,您可以使用整数的最大值作为无穷大。

关于java - 修改最短路径算法(从节点到自身的路由),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1954743/

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