Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.util.ArrayList;
- import java.util.Iterator;
- import java.util.Arrays;
- public class Dominancia{
- public ArrayList<Punto> Combinar(ArrayList<Punto> p1in, ArrayList<Punto> p2in){
- ArrayList<Punto> solucion = new ArrayList<Punto>();
- //Es necesario crear copia
- ArrayList<Punto> p1 = new ArrayList<Punto>(p1in);
- ArrayList<Punto> p2 = new ArrayList<Punto>(p2in);
- Iterator<Punto> itrp1 = p1.iterator();
- Iterator<Punto> itrp2 = p2.iterator();
- //Recorrer los elementos de p1
- ArrayList<Punto> puntosAEliminarP1 = new ArrayList<Punto>();
- ArrayList<Punto> puntosAEliminarP2 = new ArrayList<Punto>();
- while(itrp1.hasNext()){
- Punto currentP1 = itrp1.next();
- while(itrp2.hasNext()){
- Punto currentP2 = itrp2.next();
- if(currentP1.getX() > currentP2.getX() &&
- currentP1.getY() > currentP2.getY()){
- puntosAEliminarP2.add(currentP2);
- }
- if(currentP1.getX() < currentP2.getX() &&
- currentP1.getY() < currentP2.getY()){
- puntosAEliminarP1.add(currentP1);
- }
- }
- }
- p1.removeAll(puntosAEliminarP1);
- p2.removeAll(puntosAEliminarP2);
- solucion.addAll(p1);
- solucion.addAll(p2);
- return solucion;
- }
- public ArrayList<Punto> ResolverDominancia(ArrayList<Punto> arr){
- //Condición parada
- int size = arr.size();
- if (size > 1){
- int particion = size/2;
- ArrayList<Punto> p1 = new ArrayList<Punto>();
- ArrayList<Punto> p2 = new ArrayList<Punto>();
- for(int i=0; i<particion; i++){
- p1.add(arr.get(i));
- }
- for(int i=particion; i<size; i++){
- p2.add(arr.get(i));
- }
- return Combinar(ResolverDominancia(p1),ResolverDominancia(p2)); }
- else{
- return arr;
- }
- }
- public static void main(String p[]){
- ArrayList<Punto> arreglo = new ArrayList<Punto>();
- arreglo.add(new Punto(3,5));
- arreglo.add(new Punto(2,8));
- arreglo.add(new Punto(1,2));
- arreglo.add(new Punto(0,3));
- arreglo.add(new Punto(6,7));
- arreglo.add(new Punto(5,8));
- arreglo.add(new Punto(1,4));
- arreglo.add(new Punto(2,6));
- Dominancia objDominancia = new Dominancia();
- System.out.println(Arrays.toString(arreglo.toArray()));
- ArrayList<Punto> sol = objDominancia.ResolverDominancia(arreglo);
- System.out.println("Puntos dominantes");
- System.out.println(Arrays.toString(sol.toArray()));
- }
- }
- class Punto{
- private int x;
- private int y;
- Punto(int x, int y){
- this.x = x;
- this.y = y;
- }
- public int getY(){ return y; }
- public int getX(){ return x; }
- //Este metodo se crea para mostrar el contenido
- public String toString(){
- return "("+x+" "+y+")";
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement