4

我将所有对最短路径算法(Floyd-Warshall)应用于此有向图: 替代文字

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

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

有没有办法修改我当前的表示,以指示从 到 的最短路径B不是B零,而是12遵循该B-C-E-B路线?可以通过某种方式修改邻接矩阵方法来完成吗?

4

1 回答 1

12

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

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

实际上,您可以将整数的最大值用作无限。

于 2009-12-23T19:19:05.920 回答