Advertisement
add1ctus

Kermit

May 8th, 2016
237
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 1.46 KB | None | 0 0
  1. public class Kermit {
  2.       public double dist(int x1, int y1, int x2, int y2)
  3.       {
  4.           return Math.sqrt((x2-x1)*(x2-x1) + (y2 - y1)*(y2-y1));
  5.       }
  6.       public String swim(int R, int[] X, int[] Y) {
  7.           double[][] graph = new double[X.length][X.length];
  8.           for(int i = 0 ; i < X.length ; ++i)
  9.               for(int j = 0 ; j < X.length ; ++j)
  10.                   graph[i][j] = graph[j][i] = dist(X[i],Y[i],X[j],Y[j]);
  11.          
  12.           boolean[] visited = new boolean[X.length];
  13.           double[] dist = new double[X.length];
  14.           for(int i = 0 ; i < X.length ; ++i)
  15.               if(X[i] <= 10)
  16.               {
  17.                   dist[i] = X[i];
  18.                   visited[i] = false;
  19.               }
  20.               else
  21.               {
  22.                   dist[i] = 999999;
  23.                   visited[i] = false;
  24.               }
  25.          
  26.           double bestResult = 999999;
  27.          
  28.           for(;;)
  29.           {
  30.               int smallest = -1;
  31.               for(int i = 0 ; i < X.length ; ++i)
  32.                   if(!visited[i] && (smallest == -1 || dist[smallest] > dist[i]))
  33.                       smallest = i;
  34.              
  35.               if(smallest == -1)
  36.                   break;
  37.              
  38.               visited[smallest] = true;
  39.              
  40.               if(R - X[smallest] <= 10)
  41.                   bestResult = Math.min(bestResult, dist[smallest] + (R - X[smallest]));
  42.              
  43.               for(int i = 0 ; i < X.length ; ++i)
  44.                   if(!visited[i] && graph[smallest][i] <= 10)
  45.                       dist[i] = Math.min(dist[i], dist[smallest] + graph[smallest][i]);
  46.           }
  47.           bestResult = Math.round(bestResult*100)/100.00;
  48.           if(bestResult != 999999)
  49.               return String.format("%.2f", bestResult);
  50.           else
  51.               return "poor kermit";
  52.       }
  53.      
  54.  
  55.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement