Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public class Kermit {
- public double dist(int x1, int y1, int x2, int y2)
- {
- return Math.sqrt((x2-x1)*(x2-x1) + (y2 - y1)*(y2-y1));
- }
- public String swim(int R, int[] X, int[] Y) {
- double[][] graph = new double[X.length][X.length];
- for(int i = 0 ; i < X.length ; ++i)
- for(int j = 0 ; j < X.length ; ++j)
- graph[i][j] = graph[j][i] = dist(X[i],Y[i],X[j],Y[j]);
- boolean[] visited = new boolean[X.length];
- double[] dist = new double[X.length];
- for(int i = 0 ; i < X.length ; ++i)
- if(X[i] <= 10)
- {
- dist[i] = X[i];
- visited[i] = false;
- }
- else
- {
- dist[i] = 999999;
- visited[i] = false;
- }
- double bestResult = 999999;
- for(;;)
- {
- int smallest = -1;
- for(int i = 0 ; i < X.length ; ++i)
- if(!visited[i] && (smallest == -1 || dist[smallest] > dist[i]))
- smallest = i;
- if(smallest == -1)
- break;
- visited[smallest] = true;
- if(R - X[smallest] <= 10)
- bestResult = Math.min(bestResult, dist[smallest] + (R - X[smallest]));
- for(int i = 0 ; i < X.length ; ++i)
- if(!visited[i] && graph[smallest][i] <= 10)
- dist[i] = Math.min(dist[i], dist[smallest] + graph[smallest][i]);
- }
- bestResult = Math.round(bestResult*100)/100.00;
- if(bestResult != 999999)
- return String.format("%.2f", bestResult);
- else
- return "poor kermit";
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement