Advertisement
cardel

Puntos dominantes

Apr 13th, 2018
475
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.62 KB | None | 0 0
  1. import java.util.ArrayList;
  2. import java.util.Iterator;
  3. import java.util.Arrays;
  4.  
  5. public class Dominancia{
  6.    
  7.     public ArrayList<Punto> Combinar(ArrayList<Punto> p1in, ArrayList<Punto> p2in){
  8.         ArrayList<Punto> solucion = new ArrayList<Punto>();
  9.        
  10.         //Es necesario crear copia
  11.         ArrayList<Punto> p1 = new ArrayList<Punto>(p1in);
  12.         ArrayList<Punto> p2 = new ArrayList<Punto>(p2in);
  13.        
  14.         Iterator<Punto> itrp1 = p1.iterator();
  15.         Iterator<Punto> itrp2 = p2.iterator();
  16.         //Recorrer los elementos de p1
  17.        
  18.         ArrayList<Punto> puntosAEliminarP1 = new ArrayList<Punto>();
  19.         ArrayList<Punto> puntosAEliminarP2 = new ArrayList<Punto>();
  20.        
  21.         while(itrp1.hasNext()){
  22.             Punto currentP1 = itrp1.next();
  23.             while(itrp2.hasNext()){
  24.                 Punto currentP2 = itrp2.next();
  25.                
  26.                 if(currentP1.getX() > currentP2.getX() &&
  27.                 currentP1.getY() > currentP2.getY()){
  28.                     puntosAEliminarP2.add(currentP2);
  29.                 }
  30.                
  31.                 if(currentP1.getX() < currentP2.getX() &&
  32.                 currentP1.getY() < currentP2.getY()){
  33.                     puntosAEliminarP1.add(currentP1);
  34.                 }
  35.             }
  36.         }
  37.         p1.removeAll(puntosAEliminarP1);
  38.         p2.removeAll(puntosAEliminarP2);
  39.         solucion.addAll(p1);
  40.         solucion.addAll(p2);
  41.         return solucion;
  42.     }
  43.    
  44.     public ArrayList<Punto> ResolverDominancia(ArrayList<Punto> arr){
  45.         //Condición parada
  46.         int size = arr.size();
  47.         if (size > 1){
  48.             int particion = size/2;
  49.             ArrayList<Punto> p1 = new ArrayList<Punto>();
  50.             ArrayList<Punto> p2 = new ArrayList<Punto>();
  51.            
  52.             for(int i=0; i<particion; i++){
  53.                 p1.add(arr.get(i));
  54.             }
  55.             for(int i=particion; i<size; i++){
  56.                 p2.add(arr.get(i));
  57.             }
  58.             return Combinar(ResolverDominancia(p1),ResolverDominancia(p2));     }
  59.         else{
  60.             return arr;
  61.         }
  62.     }
  63.    
  64.     public static void main(String p[]){
  65.         ArrayList<Punto> arreglo = new ArrayList<Punto>();
  66.         arreglo.add(new Punto(3,5));
  67.         arreglo.add(new Punto(2,8));
  68.         arreglo.add(new Punto(1,2));
  69.         arreglo.add(new Punto(0,3));
  70.         arreglo.add(new Punto(6,7));
  71.         arreglo.add(new Punto(5,8));
  72.         arreglo.add(new Punto(1,4));
  73.         arreglo.add(new Punto(2,6));
  74.        
  75.         Dominancia objDominancia = new Dominancia();
  76.         System.out.println(Arrays.toString(arreglo.toArray()));
  77.         ArrayList<Punto> sol = objDominancia.ResolverDominancia(arreglo);
  78.         System.out.println("Puntos dominantes");
  79.         System.out.println(Arrays.toString(sol.toArray()));
  80.     }
  81.  
  82.    
  83.  
  84. }
  85.  
  86.     class Punto{
  87.         private int x;
  88.         private int y;
  89.        
  90.         Punto(int x, int y){
  91.             this.x = x;
  92.             this.y = y;
  93.         }
  94.        
  95.        
  96.         public int getY(){ return y; }
  97.         public int getX(){ return x; }
  98.         //Este metodo se crea para mostrar el contenido
  99.         public String toString(){
  100.             return "("+x+" "+y+")";
  101.         }
  102.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement