Guest User

Untitled

a guest
Apr 23rd, 2018
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.78 KB | None | 0 0
  1. public static int[][] findClosest(int[][] points) {
  2. int[][] res;
  3. int[][] pointsSortedByLex = sortByLex(points);
  4. int[] p = duplicates(pointsSortedByLex);
  5. if (p == null)
  6. res = findClosestRecursive(pointsSortedByLex);
  7. else {
  8. res = new int[1][];
  9. res[0] = p;
  10. }
  11. return res;
  12. }
  13.  
  14. public static int[][] findClosestRecursive(int[][] points) {
  15. int[][] res = null;
  16. int[][] ans=new int[2][2];
  17. int [][] pointsSortedByLexLeft=new int[points.length/2][2];
  18. int [][] pointsSortedByLexRight=new int[points.length-pointsSortedByLexLeft.length][2];
  19. double d=0;
  20. double Mx=0;
  21. if(points==null || points.length<2)
  22. return res;
  23. else if(points.length<=4)
  24. ans=findClosestSimple(points);
  25. else
  26. {
  27. for(int i=0; i<pointsSortedByLexLeft.length; i++)
  28. {
  29. pointsSortedByLexLeft[i]=points[i];
  30. }
  31. for(int j=0; j<pointsSortedByLexRight.length; j++)
  32. {
  33. pointsSortedByLexRight[j]=points[pointsSortedByLexLeft.length+j];
  34. }
  35. int[][] closestPair1 = findClosestRecursive(pointsSortedByLexLeft);
  36. int[][] closestPair2 = findClosestRecursive(pointsSortedByLexRight);
  37. if(distance(closestPair1[0],closestPair1[1])>distance(closestPair2[0],closestPair2[1]))
  38. {
  39. d=distance(closestPair2[0],closestPair2[1]);
  40. ans[0]=closestPair2[0];
  41. ans[1]=closestPair2[1];
  42. }
  43. else
  44. {
  45. d=distance(closestPair1[0],closestPair1[1]);
  46. ans[0]=closestPair1[0];
  47. ans[1]=closestPair1[1];
  48. }
  49. Mx=pointsSortedByLexRight[0][0];
  50. int[][] middle=sortByY(filterPointsByRange(Mx-d,Mx+d,points));
  51. for(int s=0; s<middle.length; s++)
  52. {
  53. for(int a=s+1;a<middle.length; a++)
  54. {
  55. if(distance(middle[s],middle[a])<d)
  56. {
  57. ans[0]=middle[s];
  58. ans[1]=middle[a];
  59. }
  60. }
  61. }
  62.  
  63.  
  64. }
  65. return ans;
  66. }
Add Comment
Please, Sign In to add comment