Ver Mensaje Individual
  #1 (permalink)  
Antiguo 17/09/2013, 02:50
Avatar de Alcest
Alcest
 
Fecha de Ingreso: septiembre-2013
Mensajes: 1
Antigüedad: 11 años, 6 meses
Puntos: 0
Duda Permutacion en Java

Que tal gente de Foros del Web, estoy trabajando en un programa (creo un poco simple), el unico problema que me tope y con el cual estoy trabado es el de hacer un algoritmo de permutacion, trata de hacer mi propio algoritmo y por mas tiempo que le dedique me revolvia demasiado, puesto que los hacia muy recursivos, no soy experto en programacion, simplemente me voi iniciando y pues necesito un poco de ayuda con un algoritmo que encontre ( http://stackoverflow.com/questions/13218019/generating-permutations-of-an-int-array-using-java-erro ), el cual tiene un poco derror, les dejo mi codigo, el IDE con el que trabajo es Netbeans 7.3.1, actualmente lo que necesito es mostrar una permutacion de las medidas de los pedidos, es decir, una permutacion del array pedidos[].

Código:
package proyectovarillas;

import java.util.Scanner;

/**
 *
 * @author Oscar
 */
public class ProyectoVarillas {

    public static int contador = 0;

    public static void Permutacion(int[] input, int startindex) {
        int size = input.length;

        if (size == startindex + 1) {
            System.out.println("Permutacion "+(contador+1));
            for (int i = 0; i < size; i++) {
                System.out.print(input[i] + ",  ");
            }
             System.out.print("\n");
            contador++;
        } else {
            for (int i = startindex; i < size; i++) {

                int temp = input[i];
                input[i] = input[startindex];
                input[startindex] = temp;
                Permutacion(input, startindex + 1);
            }
        }
    }

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int cant, atotal;
        System.out.print("Cantidad de varillas en el almacen: ");
        cant=in.nextInt();
        
        int almacen[] = new int[cant];
        atotal = 0;
        for (int i=0;i<cant;i++){
            System.out.print("Longitud de la varilla"+"["+(i+1)+"] en centimetros: ");
            almacen[i] = in.nextInt();
            atotal = atotal + almacen[i];
        }
        
        int pcant,ptotal;
        System.out.print("De cuantas varillas sera el pedido: ");
        pcant = in.nextInt();
        
        int[] pedido = new int[pcant];
        ptotal = 0;
        for (int i=0;i<pcant;i++){
            System.out.print("Longitud del pedido"+"["+(i+1)+"] en centimetros: ");
            pedido[i] = in.nextInt();
            ptotal = ptotal + pedido[i];
        }
        
        int completo = atotal - ptotal;
        if (completo<0){
            System.out.print("No se completa el pedido.");
            System.exit(0);
        }
         
        int fac = pcant;
        for (int i=1;i<pcant+1;i++){
            if (i<pcant){
                int n = pcant - i;
                fac = fac * n;
            }
        }
        
        contador = 0;
        Permutacion(pedido, 0);
        System.out.println("Permutaciones obtenidas: "+fac);
        
    }
}
Saludos