Advertisement
Guest User

Untitled

a guest
Feb 26th, 2017
101
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.32 KB | None | 0 0
  1. package com.paveloleynik.shortroute;
  2.  
  3. import com.google.android.gms.maps.model.LatLng;
  4.  
  5. import java.util.ArrayList;
  6. import java.util.List;
  7.  
  8. /**
  9.  * DijkstraAlgorithm
  10.  * Created by MATHAHAKAR (Oleynik Pavel) on 25.02.2017.
  11.  * Project: ShortRoute
  12.  */
  13.  
  14. public class WarshallAlgorithm {
  15.  
  16.     private static final WarshallAlgorithm D_A = new WarshallAlgorithm();
  17.  
  18.     private static List<LatLng> mPoints = new ArrayList<>();
  19.     private static List<LatLng> fPoints  = new ArrayList<>(); // for output
  20.  
  21.     public static List<LatLng> getRoute (List<LatLng> points) {
  22.         mPoints.clear();
  23.         fPoints.clear();
  24.  
  25.         addPoints(points);
  26.         findRoute();
  27.         return fPoints;
  28.     }
  29.  
  30.     private static void addPoints (List<LatLng> points) {
  31.         mPoints = points;
  32.     }
  33.  
  34.     private static void findRoute () {
  35.  
  36.         while (mPoints.size() > 0) {
  37.  
  38.             double dist[] = new double[mPoints.size()];
  39.  
  40.             for (int j = 0; j < mPoints.size(); j ++) {
  41.                 if (j != 0) {
  42.                     dist[j] = getWeight(mPoints.get(0), mPoints.get(j));
  43.                 }
  44.             }
  45.  
  46.             double min = findMinValue(dist);
  47.             int iMin = 0;
  48.  
  49.             for (int m = 0; m < dist.length; m ++) {
  50.                 if (dist[m] == min) iMin = m;
  51.             }
  52.  
  53.             fPoints.add(mPoints.get(iMin));
  54.             mPoints.remove(0);
  55.  
  56.             if (mPoints.size() > 0) {
  57.  
  58.                 for (int i = 1; i < mPoints.size(); i ++) {
  59.                     if (mPoints.get(i) != null) {
  60.                         LatLng latLng = mPoints.remove(i);
  61.                         mPoints.add(i - 1, latLng);
  62.                     }
  63.                 }
  64.  
  65.             }
  66.  
  67.         }
  68.  
  69.     }
  70.  
  71.     private static double findMinValue (double[] d) {
  72.         double min = d[0];
  73.         double max = min;
  74.         for (int i = 0; i < d.length; i ++) {
  75.             if (d[i] > max) max = d[i];
  76.             if (d[i] < min) min = d[i];
  77.         }
  78.         return min;
  79.     }
  80.  
  81.     private static double getWeight (LatLng latLng1, LatLng latLng2) {
  82.         double ax = latLng1.latitude;
  83.         double ay = latLng1.longitude;
  84.         double bx = latLng2.latitude;
  85.         double by = latLng2.longitude;
  86.         return Math.sqrt( (Math.pow((bx - ax), 2)) + (Math.pow((by - ay), 2)) );
  87.     }
  88.  
  89. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement