Advertisement
Guest User

Untitled

a guest
Jun 14th, 2017
151
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.68 KB | None | 0 0
  1. public class BackTracking {
  2.  
  3.     private List<Grupo> resultado = new ArrayList<Grupo>(); //Lista con mi resultado
  4.     public List<Grupo> recursividad(Integer indice,List<Grupo> lista,Double presupuestoRestante){
  5.  
  6.         if((indice == -1 || presupuestoRestante == 0) && getSegundo(lista) >= 2 && getPrimero(lista) <= 2 && getTercero(lista) == true){ //Cuando se hayan cumplido todas las restricciones se termina.
  7.  
  8.             //Obtengo la lista con mayor numero de votos
  9.             if(resultado.size() == 0 || lista.stream().mapToDouble(x->x.getVotos()).sum() > resultado.stream().mapToDouble(x->x.getVotos()).sum()){
  10.                 resultado.clear(); //Elimino la lista que hubiese antes
  11.                 resultado.addAll(lista); //Añado la nueva lista
  12.                 }
  13.  
  14.             }else{
  15.                 for(Grupo a : getAlternativa(lista,indice,presupuestoRestante)){ //Las alternativas
  16.  
  17.                     presupuestoRestante-=a.getPrecio(); //Añado
  18.                     lista.add(a);
  19.                
  20.                     recursividad(indice-1, lista,presupuestoRestante);
  21.                
  22.                     presupuestoRestante+=a.getPrecio(); //Elimino
  23.                     lista.remove(a);
  24.             }
  25.         }
  26.         return resultado;
  27.  
  28.     }
  29.    
  30.     public List<Grupo> getAlternativa(List<Grupo> lista,Integer indice,Double presupuestoRestante){
  31.         List<Grupo> res = new ArrayList<Grupo>();
  32.         for(Grupo a : Test.lista){
  33.             if(!lista.contains(a) && (a.getPrecio() <= presupuestoRestante)){
  34.                 res.add(a);
  35.             }
  36.         }
  37.         return res;
  38.     }
  39.    
  40.     private Boolean getTercero(List<Grupo> grupos) { //No mas de una actuacion por dia
  41.         int a = 0;
  42.         int b = 0;
  43.         int c = 0;
  44.         int d = 0;
  45.    
  46.         for(Grupo lista : grupos){
  47.             if(lista.getDia().equals("viernes") && lista.getHora().equals("tarde")){
  48.                 a++;
  49.             }
  50.             if(lista.getDia().equals("viernes") && lista.getHora().equals("noche")){
  51.                 b++;
  52.             }
  53.             if(lista.getDia().equals("sabado") && lista.getHora().equals("tarde")){
  54.                 c++;
  55.             }
  56.             if(lista.getDia().equals("sabado") && lista.getHora().equals("noche")){
  57.                 d++;
  58.             }
  59.         }
  60.         return a==1&&b==1&&c==1&&d==1;
  61.     }
  62.    
  63.     private Long getPrimero(List<Grupo> lista) { //2 grupo deben haber estado cerca
  64.         return lista.stream().filter(x -> x.esCerca() == true).count();
  65.     }
  66.     private Long getSegundo(List<Grupo> lista) { //2 grupo deben haber sido nuevo
  67.         return lista.stream().filter(x -> x.esNuevo() == true).count();
  68.     }
  69.    
  70. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement