Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public class BackTracking {
- private List<Grupo> resultado = new ArrayList<Grupo>(); //Lista con mi resultado
- public List<Grupo> recursividad(Integer indice,List<Grupo> lista,Double presupuestoRestante){
- if((indice == -1 || presupuestoRestante == 0) && getSegundo(lista) >= 2 && getPrimero(lista) <= 2 && getTercero(lista) == true){ //Cuando se hayan cumplido todas las restricciones se termina.
- //Obtengo la lista con mayor numero de votos
- if(resultado.size() == 0 || lista.stream().mapToDouble(x->x.getVotos()).sum() > resultado.stream().mapToDouble(x->x.getVotos()).sum()){
- resultado.clear(); //Elimino la lista que hubiese antes
- resultado.addAll(lista); //Añado la nueva lista
- }
- }else{
- for(Grupo a : getAlternativa(lista,indice,presupuestoRestante)){ //Las alternativas
- presupuestoRestante-=a.getPrecio(); //Añado
- lista.add(a);
- recursividad(indice-1, lista,presupuestoRestante);
- presupuestoRestante+=a.getPrecio(); //Elimino
- lista.remove(a);
- }
- }
- return resultado;
- }
- public List<Grupo> getAlternativa(List<Grupo> lista,Integer indice,Double presupuestoRestante){
- List<Grupo> res = new ArrayList<Grupo>();
- for(Grupo a : Test.lista){
- if(!lista.contains(a) && (a.getPrecio() <= presupuestoRestante)){
- res.add(a);
- }
- }
- return res;
- }
- private Boolean getTercero(List<Grupo> grupos) { //No mas de una actuacion por dia
- int a = 0;
- int b = 0;
- int c = 0;
- int d = 0;
- for(Grupo lista : grupos){
- if(lista.getDia().equals("viernes") && lista.getHora().equals("tarde")){
- a++;
- }
- if(lista.getDia().equals("viernes") && lista.getHora().equals("noche")){
- b++;
- }
- if(lista.getDia().equals("sabado") && lista.getHora().equals("tarde")){
- c++;
- }
- if(lista.getDia().equals("sabado") && lista.getHora().equals("noche")){
- d++;
- }
- }
- return a==1&&b==1&&c==1&&d==1;
- }
- private Long getPrimero(List<Grupo> lista) { //2 grupo deben haber estado cerca
- return lista.stream().filter(x -> x.esCerca() == true).count();
- }
- private Long getSegundo(List<Grupo> lista) { //2 grupo deben haber sido nuevo
- return lista.stream().filter(x -> x.esNuevo() == true).count();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement