任意两点之间最短

 

package shortestpath;

public class ShortestPath {
  static int node;//节点总数
  static int[][] array;
  //初始化图
  static int[][] init(int node){
    array = new int[node][node];
    for(int i = 0; i< node;i++)
     { for(int j = i;j <node; j++){
         array[i][j] = (int) (Math.random() * node + 1);//防止相异的两点距离为0的情况出现
         array[j][i] = array[i][j];
       }
       array[i][i] = 0;
     }
    return array;
  }
  //注意:k 的循环要在最外层
  static int[][] shortestpath(){
    for(int k =0;k < node; k++){
      for(int i = 0; i< node; i++){
        for(int j =0;j < node ;j++){
          if(array[i][j] > array[i][k] + array[k][j])
            array[i][j] = array[i][k] + array[k][j];
        }

      }
    }
    return array;
 }
 //测试程序
 public static void main(String[] args){
   node = 5;
   init(node);
   for(int i = 0;i < node;i++){
     for(int j=0;j <node;j++){
       System.out.print(array[i][j] + " ");
     }
     System.out.println(" ");
   }
   shortestpath();
   System.out.println("");
   System.out.println("");
   for(int i = 0;i < node;i++){
     for(int j=0;j <node;j++){
       System.out.print(array[i][j] + " ");
     }
     System.out.println("");
   }
 }
}

 

你可能感兴趣的:(任意两点之间最短)