Welcome, guest! Login / Register - Why register?
Psst.. new poll here.
Psst.. new forums here.
Microsoft is blocking us again (TY IP Reputation!) so just use oauth login instead. :)

Paste

Pasted as Java by xDTatoDx ( 14 years ago )
public class BackTrackin {

    private static int cont=0;
 /**
     * Ejercicio posibles combinaciones usando backTracking
     */
    public static void main(String[] args) {
        // TODO code application logic here
        int lista[] = {1,1,1,11,5,1};
        int X[] = getMatrizCero(lista.length);
        int M = 10;
        int r = 0;
        comb(lista,M,X,r);
        if(cont==0) System.out.println("No hay combinaciones posibles.");
    }
    private static int[] getMatrizCero(int l) {
     int [] aux = new int[l];
  for(int i=0;i<l;i++) aux[i] = 0;
  return aux;
 }
    public static void comb(int list[],int M,int x[], int r){   
        while(r<list.length){ //si r excede el tamaño acaba el metodo
            x[r]= 1;
            cont++;
            if(suma(x,list)==M){
                System.out.println(print(sacaDato(x,list))); //si la combinacion es correcta se imprime
           //se iguala a cero el ultimo elemento para probar con otras combinaciones
            }else{
              if(suma(x,list)>M){
                     x[r] = 0;
                     cont--;//al ser mayor se elimina el elemento para luego probar con el siguiente            
                 }else{
                  cont--;
                     comb(list,M,x,r+1);// al ser menor se agrega el siguiente elemento                 
                 }
            }
            x[r]=0;// se iguala a 0 y se prueba con la siguiente opcion
            r++;
        }
    }
    public static int suma(int x[],int l[]){
        int suma = 0;
        for(int i = 0; i<x.length; i++){
            suma = (x[i]*l[i])+suma;                    
        }
        return suma;
    }
    public static String print(int []x ){
        String nuevo =""+x[0];
        for(int i = 1; i<x.length;i++){
            nuevo = nuevo+" - "+x[i];
                    
        }
        return nuevo;
    }
    public static int[] sacaDato(int[] x, int[]l){
        int[] copia = new int[x.length];
        for(int i = 0; i<x.length; i++){
            copia[i] = x[i]*l[i];
        }
        return copia;
    }
}

 

Revise this Paste

Your Name: Code Language: