Data hosted with ♥ by Pastebin.com - Download Raw - See Original
  1. public class Graph {
  2.     private double[][] path;
  3.  
  4.     public Graph(double [][]path){
  5.         this.path=path;
  6.     }
  7.     public Graph(int numberOfNode,double maximumDistance){
  8.         this.path=new double[numberOfNode][numberOfNode];
  9.         for(int i=0;i<path.length-1;i++){
  10.             path[i][i]=0;
  11.             for(int j=i+1;j<path[i].length;j++){
  12.                 path[i][j]=Math.random()*maximumDistance;
  13.                 path[j][i]=path[i][j];
  14.             }
  15.         }
  16.     }
  17.     public void setDistanceLimit(double limit){
  18.         for(int i=0;i<path.length-1;i++){
  19.             for(int j=i+1;j<path[i].length;j++){
  20.                 if(path[i][j]>limit){
  21.                     path[i][j]=Double.POSITIVE_INFINITY;
  22.                     path[j][i]=path[i][j];
  23.                 }
  24.             }
  25.         }
  26.     }
  27.     public double shortestPath(int start,int goal){
  28.         double []weight=new double[path.length];
  29.         boolean []found=new boolean[path.length];
  30.  
  31.         for(int i=0;i<path.length;i++){
  32.             weight[i]=path[start][i];
  33.             found[i]=false;
  34.         }
  35.  
  36.         weight[start]=0;
  37.         found[start]=true;
  38.  
  39.         for(int i=0;i<path.length;i++){
  40.  
  41.             int minId=0;
  42.             double minValue=Double.MAX_VALUE;
  43.             for(int j=0;j<path.length;j++){
  44.                 if(!found[j])
  45.                     if(minValue>weight[j]){
  46.                         minValue=weight[j];
  47.                         minId=j;
  48.                     }
  49.             }
  50.  
  51.             found[minId]=true;
  52.             for(int j=0;j<path.length;j++){
  53.                 if(!found[j])
  54.                     if(weight[j]>minValue+path[minId][j]){
  55.                         weight[j]=minValue+path[minId][j];
  56.                     }
  57.             }
  58.         }
  59.  
  60.         return weight[goal];
  61.     }
  62.  
  63.     public static void main(String []args){
  64.         double [][]path={{0,10,20},{20,0,7},{8,9,0}};
  65.         Graph g=new Graph(path);
  66.         g.setDistanceLimit(15);
  67.        
  68.         int start=0;
  69.         int goal=path.length-1;
  70.         System.out.printf("The shortest distance between %d to %d is %.2f ",start,goal,g.shortestPath(start,goal));
  71.     }
  72. }